すぐマク Excel VBA Board

22021
Excel VBA Board
画像クリックで拡大。レスのついた質問は削除しない。回答には返礼を!
お名前
件名
メッセージ
画像
メールアドレス
ホームページ
文字色
削除キー (半角英数字のみで4〜8文字)
プレビューする (投稿前に、内容をプレビューして確認できます)

通貨別合計額を集計する 五月林

2008/09/25 (Thu) 11:53:06

以下のように、同列内の複数の通貨額を、通貨別に集計し、それぞれの合計額を表示させたいのですが、どのように式を立てればよろしいでしょうか?よろしくお願いいたします。

\500
\1,000
$800.00
$100.00
\500
$100.00
$合計
\合計

Re: 通貨別合計額を集計する - 永井善王 Home

2008/09/25 (Thu) 14:55:17

丸投げ質問は感心しませんね。
ご自分でどこまでやって、どこで困っているのかを質問された方がよろしいかと。

「式を立てれば」とありますが、マクロで処理するのではなくて、ワークシートに数式を設定したいのでしたら、Excel一般のBBSが相応しいかと。

Range(Cells( , )の使用入について Tosio

2008/09/22 (Mon) 12:40:38

セルの行番地を求めた値myRowを、フィルターオプションのコピー指定範囲に代入しますと、アプリケーション定義またはオブジェクト定義のエラーと出ます。
どう修正したら良いか、ご教示願います。

'シートの最終行を求める
Dim iRow_First As Long
Dim iRow_Last As Long

With Selection.Areas(1)
With .Cells(1, 1)
iRow_First = .Row
End With
iRow_Last = iRow_First + .Rows.Count - 1
End With
MsgBox "帳票最終行前は" & CStr(iRow_Last) & "行目です。"

'コピー先のシートを相応の範囲でクリアする
Dim myRow As Long
myRow = CStr(iRow_Last)

Worksheets("処理シート01").Activate
Worksheets("処理シート01").Range(Cells(3, 1), Cells(myRow, 21)).Clear

'コピー元を重複なく、データを抽出し、指定場所(処理シート01)へ貼り付ける。
Worksheets("材料仕入帳").Activate
With Worksheets("材料仕入帳")
.Range(Cells(3, 1), Cells(myRow,21)).AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Range(Cells(1, 4), Cells(2, 4)), _
CopyToRange:=Worksheets("処理シート01").Range(Cells(3, 1), Cells(myRow,21)), _
Unique:=True
End With

Range(Cells(3, 1), Cells(myRow,21)で、前行は機能してますが、後行は機能してないようです。

Re: Range(Cells( , )の使用入について - 永井善王 Home

2008/09/25 (Thu) 07:04:43

時間がないので詳しく見てませんが、「前行は機能してますが」と言われるのは、Clearの行ですか?
エラーが出た時の myRow と iRow_First と iRow_Last の値はどうなっていますか?
データは示せますか?

エクセルのメニューバーで クロスケ

2008/09/19 (Fri) 19:02:07

いつも参考にさせて頂いております。
マクロを作成し、そのマクロをエクセルのメニュバーに表示&登録しました。
登録したマクロは複数ある為、プルダウンの形をとっております。
あるエクセルを開きボタン押下でマクロを実行させる場合、該当しないボタンが押下されたら実行させない様にしたいのですが
どのように設定すれば良いでしょうか?

フロー制御に関する質問 - えぬ

2008/08/28 (Thu) 11:31:20

あるセルに数字を入力すると、そのセルと同じ行に図形の直線が引かれるようにするにはどうすればいいのでしょうか?ちなみに引くのは罫線ではなく、図形の直線です。お願いします。

Re: フロー制御に関する質問 - 永井善王 Home

2008/08/28 (Thu) 15:03:32

ご自分でとこまで出来ましたか? わからないところは、どこですか?
途中段階のコードであっても、示された方が良いと思いますよ。

Re: フロー制御に関する質問 - えぬ

2008/08/28 (Thu) 15:15:03

初心者なもので礼儀もあまり分からず大変失礼いたしました。

VBAに関しては勉強を始めたばかりで深く理解していないのが現状です。ご教授願えればと思います。

現在の状況ですが、本ホームページのフロー制御を参考に…

Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyRow As Long
Dim MyCol As Integer
MyCol = Target.Column
If MyCol = 3 Then
If Target <> "" Then
Macro3
End If
End If

End Sub

と書いてみました。マクロ3の内容は…


ActiveSheet.Shapes.AddLine(918.75, 238.5, 1254.75, 238.5).Select…

という内容なのですが、これだと同じところにひたすら重ね書きされるのみです・・・。

どうしたら記入したセルと同じ行に線を引くことができるのでしょうか?初心者で見当違いのことをしているのかもしれませんが、宜しくお願いします。

Re: フロー制御に関する質問 - 永井善王 Home

2008/08/28 (Thu) 15:54:13

918.75, 238.5, 1254.75, 238.5 が
線の始点の位置のX座標、始点の位置のY座標、終点の位置のX座標、終点の位置のY座標 であり文書の左上隅を基準にするということは、ヘルプで調べて知ってますね。

この指定を「記入したセルと同じ行」にするためには、その行の座標値を与えてあげれば実現することになります。

下記ページ
・ウィンドウ左端からセル左端までの距離
http://www.happy500z.com/YNxv203.html#12
・指定したセル範囲内にある図形を削除するには?
http://www.happy500z.com/YNxv9e05.html
を手掛かりに取り組んでみて、わからない点が出たら再質問されるとよろしいかと。

Re: フロー制御に関する質問 - えぬ

2008/08/28 (Thu) 16:22:51

永井善王様、御返信ありがとうございます。

私の伝え方が下手だったようで、すいません。改めて書かせていただきます。

例えば、A1に文字を記入したら1行目のC列からR列まで線が引かれ、またA2に文字を記入した場合、二行目のC列からR列まで線が引かれるVBAはどのように書くのでしょうか?

私としてはこの処理をマクロ二つに分けることなく、「A列に何か文字が書かれたら、書かれたそれぞれの列のC列からR列までに線が引かれるイベントプロシージャー」として書きたいと思っています。

何度もお尋ねして申し訳ありませんが、ご教授のほど宜しくお願いします。

Re: フロー制御に関する質問 - 永井善王 Home

2008/08/28 (Thu) 17:38:55

せっかく差し上げた手掛かりなのに、取り組んでみなかったようですね。
C列、R列といっても各シートによって列幅が違う場合があるので、線を引く直前に測ってみる必要があるということは分かりますね。

Range("C1").Select
始点座標 = ExecuteExcel4Macro("GET.CELL(42)")
Range("R1").Select
終点座標 = ExecuteExcel4Macro("GET.CELL(42)")
MsgBox "C: " & 始点座標 & "、R: " & 終点座標

このコードで得られた値を
「ActiveSheet.Shapes.AddLine(918.75, 238.5, 1254.75, 238.5).Select」
で使うことになります。ここまではわかりますか?
わずか28分間で再質問、ちょっとがっかりで〜す。

Re: フロー制御に関する質問 - えぬ

2008/08/29 (Fri) 00:02:14

お返事ありがとうございます。なるほど、なるほど。列幅まで頭が回りませんでした。

時間がややかかりましたが、ここまでは、いろいろ調べさせて頂いて理解しました。

一先ず、試行錯誤してから再質問させていただきます。

Re: フロー制御に関する質問 - えぬ

2008/08/29 (Fri) 12:32:50

おかげさまで水平方向については理解できました。
ただ、列についてはどのように得られた数値を代入すればいいのでしょうか?

Re: フロー制御に関する質問 - 永井善王 Home

2008/08/29 (Fri) 21:52:20

> おかげさまで水平方向については理解できました。
試行錯誤の結果、下記コードはどう変わりましたか?
ActiveSheet.Shapes.AddLine(918.75, 238.5, 1254.75, 238.5).Select



Re: フロー制御に関する質問 - えぬ

2008/09/03 (Wed) 17:46:29

ご教授いただいた…

Range("C1").Select
始点座標 = ExecuteExcel4Macro("GET.CELL(42)")
Range("R1").Select
終点座標 = ExecuteExcel4Macro("GET.CELL(42)")
MsgBox "C: " & 始点座標 & "、R: " & 終点座標

によって得られたC:134.5、R:458.5数値を用いると…

ActiveSheet.Shapes.AddLine(134.5, 238.5, 458.5, 238.5).Select

この238.5の数字を変えなければならないことは理解しているのですが、どのように記述すればいいのかが出てきません。

ガンバ!! - 永井善王 Home

2008/09/03 (Wed) 21:01:37

ここまで理解できたのなら後は何とかなりそうですね。下記マクロを試した結果を使うとよいかと。

Sub test()
Range("C3").Select
MsgBox ActiveCell.Left '列Aの左端からセル範囲の左端までの距離(ポイント単位)
MsgBox ActiveCell.Width '列の幅(ポイント単位)
MsgBox ActiveCell.Top '行1の上端からセル範囲の上端までの距離(ポイント単位)
MsgBox ActiveCell.RowHeight '行の高さ(ポイント単位)
MsgBox Range("A1:C3").Height '行の高さの合計(ポイント単位)
End Sub

ご健闘を祈ります。

Re: 複数シートを1シートにまとめるとき前のものを削除する るあ

2008/08/27 (Wed) 00:09:15

永井善王様、ありがとうございます。
私が参考にさせていただいたのは永井様御掲示のものです。
下が私の作成したものです。

シート数は月によってかわるのでインプットボックスをいれました。

2〜のシートはデータが更新されるのでその都度まとめシートも更新したく今は手作業で古いデータと画像を消し、きれいにするか空白のものを別ブックからコピーしてからマクロ実行しています。
これもマクロに含めないかと思いまして・・・可能でしょうか??(コピーしてくるなら同じブックに空白シートを作っておいてそれを持ってきた方がよいかもしれませんが)

また、このマクロの場合複数シートの方は数字ですがこれは数字ではまずい場合はどうすればいいのでしょうか??
最後に、いまは最終シートをインプットボックスで指定しますが、これを間違えて入力したとえばデータのないシートもまとめる複数シートにはいってしまうとそのシートの分は列見出しが貼り付けられてしまうのですが  もし可能ならこれを回避したいです。
説明がわかりにくくて申し訳ありません。

ご教授よろしくおねがいします。





Sub まとめ()
Dim n As Integer
Dim LastR1 As Long, LastR2 As Long
Dim s As Integer

s = InputBox("最終シート名を入力してください")
For n = 2 To s 'データシートの数だけループ
LastR1 = Sheets("まとめ").Range("A65536").End(xlUp).Row '貼付先シートの最終行取得
LastR2 = Sheets(n).Range("A65536").End(xlUp).Row '貼付元シートの最終行取得
With Sheets(n) '貼付元データをコピー(最終行の1行下まで)
.Range(.Cells(3, 1), .Cells(LastR2, 42)).Copy
End With
ActiveSheet.Paste Destination:=Sheets(1).Cells(LastR1 + 1, 1) '貼付(2行下を起点)
Next
Application.CutCopyMode = False
End Sub

Re: Re: 複数シートを1シートにまとめるとき前のものを削除する - 永井善王 Home

2008/08/27 (Wed) 21:20:03

聞きたかったことは「複数シートのほうが更新されたときにまとめシートも更新されるようにしたい」でしたね。
それに対する答えとして「リンク貼り付け」を紹介しておきましたが、そのことは無視されてしまったようですね。解決したことの謝辞もなく、他の質問を始めてはいけませんよ。

「複数シートの方は数字ですがこれは数字ではまずい場合はどうすればいいのでしょうか」ですが、「数字ではまずい場合」は考えられません。具体的に説明できますか。

「データのないシート」が「列見出ししかないシート」ということなら、データの行数で判定可能ですね。あなたは既に、End(xlUp) を使ってみえるので分かるはずと思います。

Re: Re: 複数シートを1シートにまとめるとき前のものを削除する るあ

2008/08/28 (Thu) 01:37:56

永井様、ご返答ありがとうございます。
申し訳ありません。ご紹介いただいた「リンク貼り付け」はすぐに実行させていただきましたがデータが図として貼り付けられてしまいましたがこのマクロは図のリンク貼り付けでしたでしょうか?もしそうでしたら私の説明がいけませんでしたのでもう一度ご説明させてください。―――このご報告がなくてたいへん失礼しました。そして付け加えて複数の質問を重ねてしまったのにひとつひとつご返答いただきまして本当にありがとうございます。


質問は変わらず、前回投稿でご説明した「2〜のシートはデータが更新されるのでその都度まとめシートも更新したく今は・・・これもマクロに含めないかと思いまして・・・可能でしょうか??」ですがわかりにくいですよね。。。すみません。
わたしなりにいろいろ方法はかんがえたのでそれとそれの問題点を提示すれば少しわかりやすいでしょうか。

いまの状態だとマクロまとめを実行するたびにどんどんまとめシートにデータが重複して貼り付けられます。なので・・・

1・まとめるまえに今データが入っているセルを選択させて削除することを加える。
 (セルにはいっている画像も削除してくれるのか??)・・・図は1セル内に収まるようにはいっています

2・まとめシートのデータがはいっていないシートを同じブック内に作成しておいてそれを貼    り付け先にする。
 (単純にこんなことができるのかがわかりません。)

文が長くてすみません。

そして「複数シートの方は数字ですがこれは数字ではまずい場合はどうすればいいのでしょうか?」は「複数シートのシート名はすうじですが・・・」のまちがえです。すみません。
 
 For n = 2 To s 'データシートの数だけループ

For toは数字でなければいけないのかと思いまして。できればシート名を文字列にしたいです。

最後に、「データのないシート」が「列見出ししかないシート」ですが

With Sheets(n) '貼付元データをコピー(最終行の1行下まで)
.Range(.Cells(3, 1), .Cells(LastR2, 42)).Copy
End With

Sheet(n)の列見出しは2行目なのですがなぜ列見出しがコピーされるのでしょうか??

度重なるご無礼お許しください。
どうかご教授よろしくお願いします。

「リンク貼り付け」を - 永井善王 Home

2008/08/28 (Thu) 21:36:07

> ご紹介いただいた「リンク貼り付け」はすぐに実行させていただきましたがデータが図として貼
> り付けられてしまいましたがこのマクロは図のリンク貼り付けでしたでしょうか?

お教えした「リンク貼り付け」のページにあるサンプルブックをダウンロードして動かしてみれば分かることを聞いてはいけませんよ。これを理解しないで次のステップに入ろうとしていませんか。
何事も第一歩が肝心かと。

Re: Re: 複数シートを1シートにまとめるとき前のものを削除する - るあ

2008/08/31 (Sun) 22:41:48

ダウンロード見落としていました。すみません。
理解できるようがんばってみます!!
会社では返信できないので時差が生じてしまいますが結果をまたご報告させていただきます。

Re: Re: 複数シートを1シートにまとめるとき前のものを削除する るあ

2008/09/02 (Tue) 01:03:23

こんばんわ。いつもありがとうございます。
サンプルをダウンロードしてみました。

サンプルマクロ_19991106cで2回目以降のマクロ実行をしないようにしているのですよね・・・

今回作成したいのは何度も更新したいので、貼り付けの部分のみを書き換えて、リンク貼り付けにしました。下記です。

Sub まとめ()
Dim n As Integer
Dim LastR1 As Long, LastR2 As Long
Dim s As Integer
s = InputBox("最終シート名を入力してください")
For n = 2 To s 'データシートの数だけループ
LastR1 = Sheets("まとめ").Range("A65536").End(xlUp).Row '貼付先シートの最終行取得
LastR2 = Sheets(n).Range("A65536").End(xlUp).Row '貼付元シートの最終行取得
With Sheets(n) '貼付元データをコピー(最終行の1行下まで)
.Range(.Cells(3, 1), .Cells(LastR2, 14)).Copy
End With
Worksheets("まとめ").Cells(LastR1 + 1, 1).Select
ActiveSheet.Paste Link:=True
Next
Application.CutCopyMode = False
End Sub

これで、リンク貼り付けができるようになりました。ありがとうございます。
しかし、やはり何度も更新したいとなるとやはり

Worksheets("まとめ").Cells(LastR1 + 1, 1).Select

でデータの最終行を貼り付け先に指定してしまっているのでマクロ実行の度にデータを重複して貼り付けていってしまうというのはわかるのですが・・・

サンプルマクロ_19991106cで初回が2以上の場合は2番目のSheetのみまとめSheetのはじめと指定しようかと思ったのですが、そうするともし2番目Sheetが更新時データを減らしたとしたら前のデータが残った状態になってしまいますよね。

やはり新しいSheetを挿入してそこに貼り付ける方法がよいのでしょうか??
そうするとあたらしく挿入したSheet名を貼り付け先に指定することは可能なのでしょうか??

それと、もうひとつ問題が生じました。

いままでの普通の貼り付けなら画像もきちんと貼り付けられましたが、リンク貼り付けだとやはりセル内の情報としては「0」となってしまいました・・・。これは解決できますでしょうか??

何度も申し訳ありません。
よろしくおねがいします。

ガンバ - 永井善王 Home

2008/09/02 (Tue) 06:43:09

> これで、リンク貼り付けができるようになりました。ありがとうございます。

よかったですね。

> いままでの普通の貼り付けなら画像もきちんと貼り付けられましたが、リンク貼り付けだと
> やはりセル内の情報としては「0」となってしまいました・・・。

「よって、組み合わせて使うことにしました。」と言って欲しかったで〜す。

> そうするともし2番目Sheetが更新時データを減らしたとしたら前のデータが残った状態になってしまいますよね。

全体像が見えないので答えにくいですが、シートのレイアウトが都度変わるようなものはマクロ処理に適さないか、複雑なマクロを組む必要があると言えるでしょう。
じっくり腰を据えて取り組まれるとよいかと思います。ご健闘を!

複数シートを1シートにまとめるとき前のものを削除する るあ

2008/08/26 (Tue) 07:23:46

おはようございます。

VBAはここ数カ月でチャレンジし始めて昨日このサイトを発見しました。答え方がとってもやさしくてうれしいです(きびしいサイトがおおかったので・・・)

複数シートをまとめシートにまとめています。
これは完成したのですが、複数シートのほうが更新されたときにまとめシートも更新されるようにしたいのですが、可能でしょうか??ちなみに画像つきのデーターです。
まとめるマクロはこちらのサイトの複数シートをまとめるマクロをつかわせていただきました。
すみません。ここからそれがあるところにどういけばよいか。。。

Re: 複数シートを1シートにまとめるとき前のものを削除する - 永井善王 Home

2008/08/26 (Tue) 08:23:39

あなたが作られたマクロは、「複数シートのデータをSheet1へコピーするには?」
http://www.happy500z.com/YNxv99116.html
のページのものと同じでしょうか? あなたのものも示された方が回答が的確になるかと。

一応、「リンク貼り付け」
http://www.happy500z.com/YNxv209.html#6
を試してみて、残った疑問点を再質問されては。

Re: 複数シートを1シートにまとめるとき前のものを削除する るあ

2008/08/27 (Wed) 00:11:57

すみません。間違えて新規で投稿してしまいました。

自動で切り取り貼り付けを行う - トシ

2008/08/24 (Sun) 23:17:31

こんにちは。トシと申します。

VBAは全くの初心者ですがこのサイトが大変やくにたっています。ありがとうございます。

件名の表現が適切かわかりませんが、教えてください。

株価ソフトを使用して、ある銘柄の現在値などのデータをエクセルシート表示させているのですが、
たとえば、A1セルに現在値を表示させ、現在値が更新されると、更新前の値はひとつ下のA2のセルに移動させることはできるのでしょうか?

なお、この先も繰り返し?A1とA2にデータが入っていて、更新されるとA2とA3にデータを移動させるとの操作です。

なお、現在値のデータは「=RSS|'1111.T'!現在値」という数式?で取得しています。

以上、よろしくお願いします。

Re: 自動で切り取り貼り付けを行う - 永井善王 Home

2008/08/25 (Mon) 07:28:37

Worksheet_Changeイベントで可能と思われます。まずは下記ページ
「A列のセルの値が変更されたら同じ行のB列のセルへ日付をセットするには?」
http://www.happy500z.com/YNxv9c706.html
をマスターされて、A1セルの現在値が更新されると値をひとつ下のA2のセルに移動させる部分を完成させてから、繰り返し部分を作られるとよいでしょう。
その結果、わからないところが出ましたら、具体的に質問されると答えやすいですね。

Re: 自動で切り取り貼り付けを行う - トシ

2008/08/25 (Mon) 22:09:02

永井善王さん、ありがとうございます。
できるのですね!!

しかし・・・
リンク先の内容をやってみたのですが、実行できません。
どこがおかしいのか?初心者には難しいのなあ〜?

もうすこし頑張ってみます。
また、質問する場合は、よろしくお願いします。

取り急ぎ、お礼申し上げます。

繰り返し複数のhtmlファイルを読み込むには? たつお

2008/08/22 (Fri) 16:44:54

はじめて質問させていただきます。
いつもマクロを作成する際に,活用させていただき,大変助かってます。

今回マクロを作成しているときに,どうしてもエラーが表示されてしまって,困っていますので助けて下さい。

複数のフォルダ内にあるhtmlファイルを参照して,その中の情報をエクセルで扱いたいのですが,読み込めません。
下記のような手法で試みたのですが,何か悪いでしょうか?

(1)ファイルリスト取得して,エクセルセル内にファイルパスを含めて記述
(2)記述したセルを参照して,Openメソッドを使用したが,ここでエラーが発生。
構文↓
Dim HTMLFile As Variant
HTMLFile = Cells(1, 2).Value
Workbooks.Open FileName:=" " & HTMLFile & " "

うまく読み込みができれば,Cell参照先を変更して,繰り返し読み込もうとしています。

上記内容で理解していただけますでしょうか?
お願いします。

Re: 繰り返し複数のhtmlファイルを読み込むには? - 永井善王 Home

2008/08/22 (Fri) 17:44:20

肝心なことが抜けてませんか、Cells(1, 2)にはどんな値が入っているのですか?
それと、FileName:=" " & HTMLFile & " " の前後のスペースは何のためにあるのですか?

Re: 繰り返し複数のhtmlファイルを読み込むには? - たつお

2008/08/23 (Sat) 14:14:49

早速のご返信ありがとうございます!
言葉足らずですいません。

ご指摘を元にちょっと見直してみました。
確かにスペースをなくすと読み込むことができました。
一つのファイルを読むことはできましたが、応用させて繰り返し読み込もうとしたら、やはりエラーが表示されてしまいました・・・。
以下構文です。↓
Sub test()
Dim i As Integer
Dim HTMLFile As Variant
For i = 1 To 2
HTMLFile = Cells(i, 2).Value
Workbooks.Open Filename:="" & HTMLFile & ""
Next i
End Sub

わかりにくいと失礼ですので、画像も添付させていただきました。
何卒、ご指導のほどお願い致します。

Re: 繰り返し複数のhtmlファイルを読み込むには? - 永井善王 Home

2008/08/24 (Sun) 07:25:48

エラーメッセージの内容を正確に示さないで質問してはいけません。
通常、エラーメッセージにはエラー原因が表示されていますから、その原因を取り除けば解決するはずですね。
当てずっぽうですが、B2セルにある「@Public」というフォルダは存在するのですか?
それと、Workbooks.Open Filename:=HTMLFile だけで良いのでは。

Re: 繰り返し複数のhtmlファイルを読み込むには? - たつお

2008/08/24 (Sun) 14:30:14

ご多忙にも関わらず、何度もご回答いただき、ありがとうございます。
結論を先に述べさせていただきますと、うまくできました。ありがとうございます。

自分が失敗していた原因は、先に読み込んだファイルをCLOSEしてから次を読み込むという操作をすれば繰り返し読むことができました。
先に落とさないといけなかったんですね。

ご指摘していただいた、エラーメッセージには、参照先が見つかりませんとしか言われず、もちろん参照先フォルダも存在するので混乱していました。

また、Openメソッドもご教示いただいた構文でうまくできました。
改めて、ありがとうございました。

ご参考ですが、エラー時の画像も添付させていただきます。
構文↓
Sub test()
Dim i As Integer
Dim HTMLFile As Variant
For i = 1 To 2
HTMLFile = Cells(i, 2).Value
Workbooks.Open Filename:=HTMLFile
ActiveWorkbook.Close SaveChanges:=False
Next i
End Sub
もちろん、実際は落とす前に他の作業もします。

VBAでvlookupを使用し、検索値がダブっていた場合の処理の仕方 - セイクリッド

2008/07/31 (Thu) 18:16:52

初めまして。VBAは初心者なのですが、ここのサイトを見て勉強させて頂いております。

さて、本題にはいります。
現在ユーザーフォームを使用し、顧客リストと注文履歴を表示できるようにしています。
顧客リストと注文履歴は別のシートに記載しており、顧客リストの名前をキーとして、vlookup関数を使用して、その名前に対応した注文履歴を表示される形にしています。
注文履歴は、A列から「お客様名」「注文日」「対応内容」「注文商品名」「メモ」としています。
注文が来るたびに一番下の行に追加していく形にしており、同じ人からの複数回の注文も、日付が別なので、新たに追加していく形にしています。
このようなデータで、上記ユーザーフォームを作ったのですが、どうしても同一名で複数データがあった場合に止まってしまいます。
しかしそれを表示できないと意味がありません。
色々と考えたのですが、全く良い方法が思い浮かびませんでした。
出来る事ならば、同一名で複数データがあった時に、フォームに注文毎の日付や商品等のデータを表示したいです。
何卒、ご指導の程、よろしくお願い申し上げます。

FindとFindNextメソッドがお奨めです - 永井善王 Home

2008/08/01 (Fri) 07:38:04

立派なフォームの本格的システムのようですね。
「同一名で複数データがあった場合に止まってしまいます。」ということは、1件目は表示できるが2件目以後が表示できないという意味ですね。

VLookup関数でも無理やり工夫すれば出来なくはないでしょうが、FindとFindNextメソッドを組み合わせて検索する方法をお奨めします。

FindとFindNextメソッドの使用例はVBE画面のヘルプでも見ることができますし、
このHPの中では、
・特定の情報が含まれている最初のセル番号を取得するには?( Findメソッドの使い方・その1 )
http://www.happy500z.com/YNxv98c.html
・特定の情報を検索してマークを付けるには? (Findメソッドの使い方・その2)
http://www.happy500z.com/YNxv98c2.html
など、たくさんあります。

なお、それでも良く分からない場合は、「ユーザーが開いた全ブックの全シートを指定された値で検索し見つかったセルを順に表示する」と題するサンプルが拙著「Excel VBA マクロ組み方講座 プロの定番・裏技・合わせ技[編]」にあります。蔵書している図書館が結構あるようで、付属CD-ROMで動かして見ることも可能です。

以上をトライして不明の点が出ましたら、改めて質問してください。

Re: VBAでvlookupを使用し、検索値がダブっていた場合の処理の仕方 - セイクリッド

2008/08/01 (Fri) 09:25:48

早々のお返事、誠にありがとうございます。
早速永井様のご指導を元に色々とチャレンジしてみたいと思います。
本当にありがとうございます。

Re: VBAでvlookupを使用し、検索値がダブっていた場合の処理の仕方 - セイクリッド

2008/08/22 (Fri) 17:38:19

>永井 様
お世話になっております。
ご紹介頂きました著書も購入し、ホームページも参考にし、自分なりに努力してプログラムを考えましたが、結果残念ながら上手く動かす事が出来ませんでした。
大変お手数ではございますが、出来るならばプログラムの具体的なご指導を頂きたいと存じ上げます。
何卒、よろしくお願い申し上げます。

Re: VBAでvlookupを使用し、検索値がダブっていた場合の処理の仕方 - 永井善王 Home

2008/08/24 (Sun) 08:09:04

努力なさったのですね。
私は現在、次作の執筆中で多くの時間を割くわけにはいきませんが、ざっとでよろしければ見てあげます。
作成中のファイル(動作確認できる状態のもの)をEメールに添付してお送りください。メルアドは画像のとおりです。

ドライブ、ファイル形式を変更して保存するには? yama

2008/08/08 (Fri) 12:02:54

初めて質問させていただきます。
このHPのおかげで、VBAの初心者でも何とか見よう見まねでPGMを作成することができ、とても感謝しております。

質問の内容ですが、
エクセルで作成、保存したブックをCSV形式に変換し、さらに別のドライブに保存するためのマクロを作成しています。

”ファイル名や拡張子を変更する”のモデルをコピーし、以下のマクロを作成しましたが、以下のようなエラーが表示されてしまいます。

 ”コンパイルエラー”
 ”引数は省略できません。”

3行目が反転しています。

Sub ファイル名や拡張子を変更する()
ドライブ = "Z"
ChDrive = ドライブ
パス = ドライブ & ":\" & "所属\販売\"
ChDir = パス
ActiveWorkbook.SaveAs FileFormat:=xlCSV
End Sub

お手数をお掛けしますが、ご教授いただけないでしょうか?

Re: ドライブ、ファイル形式を変更して保存するには? - 永井善王 Home

2008/08/08 (Fri) 13:02:42

ActiveWorkbook.SaveAs FileFormat:=xlCSV のところでエラーが発生するのですね。

エラー原因はエラーメッセージに表示されているとおりですから、Filename引数を指定すれば解消するかと。
ActiveWorkbook.SaveAs Filename:="Book1.csv", FileFormat:=xlCSV
のように。

こういう場合はVBE画面でヘルプを活用するといいですよ。

Re: ドライブ、ファイル形式を変更して保存するには? yama

2008/08/08 (Fri) 15:03:48

迅速なご回答ありがとうございます。

反転表示されているのは、

ChDrive = ドライブ

の部分でした。
言葉足らずで申し訳ありませんが、よろしくお願いします。

追加で申し訳ありませんが、以下のようなマクロを組むことは可能でしょうか?

保存先のフォルダにファイルが1つも保存されていないときのみ、保存OKとする。
1つでも、ファイルが保存されていたらNGとする。

よろしくお願いいたします。

Re: ドライブ、ファイル形式を変更して保存するには? - 永井善王 Home

2008/08/08 (Fri) 17:46:39

Z ドライブが無いのと違いますか。

Re: ドライブ、ファイル形式を変更して保存するには? yama

2008/08/18 (Mon) 14:09:21

ご回答ありがとうございました。
Zドライブを確認しましたが、ローカルネット上のファイルサーバーを"Z"ドライブに割り当ててありました。

Helpを確認し、以下のように修正したところうまく実行できました。

今後ともよろしくお願いいたします。


Sub ファイル名や拡張子を変更する()
ドライブ = "Z"
ChDrive = ドライブ
*上記の"="を削除し、"ChDrive ドライブ"と修正しました。

パス = ドライブ & ":\" & "所属\販売\"
ChDir = パス
*上記の"="を削除し、"ChDir パス"と修正しました

ActiveWorkbook.SaveAs FileFormat:=xlCSV
End Sub


Copyright ©2004-2005 FC2 Inc. All Rights Reserved.