異なるシートで一致するデータがあった場合、
そのセルを選択して値貼り付けするというマクロを作りました。
作ったとはいえ、
教えてもらったマクロを試行錯誤して使えるようにアレンジしただけなので、
なにがなんだかよくわかっていません。
下記の記述でマクロを使用していましたが、
突然エラーになって使用できなくなりました。。。。
中身を見ると
If Worksheets("master sheet").Cells(i, "BL").Value = Worksheets("請求書フォーム").Range("J1").Value Then
この部分が黄色に塗りつぶされてるのですが、
どこをどう直したらいいのか全くわかりません。
ちなみに、ほかのファイルでも同じようなマクロを使用していますが、
そちらは問題なく使用できています。
なんとか教えていただけないでしょうか。
よろしくお願いします!!!!
Sub こぴぺ()
'
' こぴぺ Macro
Dim sheet1 As Worksheet
Set sheet1 = Worksheets("請求書フォーム")
sheet1.Activate
Dim target As Range
Dim i As Long
Worksheets("請求書フォーム").Range("J1").Select
For i = 1 To Worksheets("master sheet").Range("BL65536").End(xlUp).Row
If Worksheets("master sheet").Cells(i, "BL").Value = Worksheets("請求書フォーム").Range("J1").Value Then
If target Is Nothing Then
Set target = Worksheets("master sheet").Range("BL" & i)
Else
Set target = Union(target, Worksheets("master sheet").Range("BL" & i))
End If
End If
Next i
Set sheet1 = Worksheets("master sheet")
sheet1.Activate
If Not target Is Nothing Then target.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
No.3
- 回答日時:
ああ、すみません。
余談のWith文のところを以下の通り修正します。
With Worksheets("master sheet")
For i = 1 To .Range("BL65536").End(xlUp).Row
If .Cells(i, "BL").Value = sheet1.Range("J1").Value Then
If target Is Nothing Then
Set target = .Range("BL" & i)
Else
Set target = Union(target, .Range("BL" & i))
End If
End If
Next i
.Activate
End With
No.2ベストアンサー
- 回答日時:
> Watch : : i : 179 : Long
これは、i=179行目、つまり"master sheet"の179行目でエラーが発生した
ということです。
> Worksheets("master sheet").Cells(i, "BL").Value
> 値=<オーバーフローしました。>
> 型=Variant/Integer
> Worksheets("請求書フォーム").Range("J1").Value
> 値=2012/05/31 14:31:44
> 型=Variant/Date
ということは、"master sheet"のセルBL179でオーバーフローが起こっている
ということです。
この結果から察するに、"master sheet"のBL列と、"請求書フォーム"のJ1セルには
日付が入っているということですね。
普通、日付が入っているセルのValueの型は、"Variant/Date"となるはずですが、
BL179の型は何故かInteger型になってますね。。。
Integer型にセットできる数の範囲は-32,768~32,767です。
ところが、Date型の値、例えば「2012/5/31」は数値に直すと「41060」になります。
「41060」を無理やりInteger型の変数にセットしようとすると、
「そんな大きな数セットできませ~ん」と「オーバーフロー」エラーになるんです。
もしかしてBL179の表示が、YYYY/MM/DDじゃなくて、「41060」とか数字になってませんか?
なってなくても、BL列を選択→右クリック→セルの書式設定で、
分類:日付、種類:1997/3/4
を選んでみてから、マクロを実行してみてください。
***
ところで。。。
> やっぱり突っ込みどころ満載なんですね(;△;)
> もしよろしければ、遠慮なく突っ込んでいただけたら嬉しいです!
では遠慮なく(笑)
まあいずれも動作には影響はなくて、後からソースコードを見たときの
見易さの問題なんですけどね。
・変数宣言("Dim"で始まる文)は、普通、Subの最初にまとめて書きます。
つまり、
> Dim target As Range
> Dim i As Long
は、
> Dim sheet1 As Worksheet
のすぐ下に書きましょう。
・Worksheets("請求書フォーム").Range("J1").Select
という一文は必要ないと思います。
Selectした後、そのセルに対して何の操作も行っていませんから。
・If Worksheets("master sheet").Cells(i, "BL").Value = Worksheets("請求書フォーム").Range("J1").Value Then
の"="以降は、
sheets1.Range("J1").Value
と書けます。
・"Worksheets("master sheet")"はWith文を使って簡略化できます。
つまり、"For i=1~"から"sheet1.Activate"は以下のように書けます。
With Worksheets("master sheet")
For i = 1 To .Range("BL65536").End(xlUp).Row
If .Cells(i, "BL").Value = sheet1.Range("J1").Value Then
If target Is Nothing Then
Set target = Worksheets("master sheet").Range("BL" & i)
Else
Set target = Union(target, Worksheets("master sheet").Range("BL" & i))
End If
End If
Next i
.Activate
End With
以上、余談でした。
nao-y さん
ヾ(✿❛◡❛)ノ(ハード)☆,。・:*:・
素晴らしい回答をありがとうございました!!
本当に本当に助かりました
&
的確な回答に感動すらしています!
見やすい新たなコードも思い通りに動いてくれています。
すごいですね!!!
私ももっと勉強しないとです。。。
どーーしてもマクロって、苦手意識があって勉強避けてました。
でも使えたらほんとに便利ですよね!
すげー!
ファンになりました!
No.1
- 回答日時:
ソースコードについて2,3ツッコミたいところは
ありますが(^^;、それは置いておいて…。
***
うーん、iがIntegerだったらオーバーフローはわかるんですが…
ちなみに、エラーになったときの
i
Worksheets("master sheet").Cells(i, "BL").Value
Worksheets("請求書フォーム").Range("J1").Value
値と型を教えてください。
エラーで止まったときに、ソースコードのiをドラッグ→右クリック→ウォッチ式の追加
をすると、「ウォッチ」と左上に書かれたウィンドウに“i”という行が現れ、値と型を確認できます。
Worksheets(~.Valueについても同様です。
この回答への補足
ご回答ありがとうございます!!
やっぱり突っ込みどころ満載なんですね(;△;)
もしよろしければ、遠慮なく突っ込んでいただけたら嬉しいです!
ウォッチというものを確認してみました!
Watch : : i : 179 : Long
と表示されまして、
値=179
型=Long
のようです。
…(;◉∀◉)
本当にごめんなさい。
さっぱりわかりません。。。
古いシートを確認したのですが、
同じ記述でちゃんと動いています。
データ量なんて2行ほどしか追加していないのに。。。
頼ってしまい恐縮ですが、
助けてください!!
よろしくお願いします。
たびたびごめんなさい!
必要情報が洩れてました;;
Worksheets("master sheet").Cells(i, "BL").Value
値=<オーバーフローしました。>
型=Variant/Integer
Worksheets("請求書フォーム").Range("J1").Value
値=2012/05/31 14:31:44
型=Variant/Date
このようになっていました!!
よろしくお願いします☆
m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
至急!尿検査前日にオナニーし...
-
白血球が多いとどんな心配があ...
-
腕を見たら黄色くなってる部分...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
精子が黄色?
-
勃起する時って痛いんですか? ...
-
尿検査前日に自慰行為した時の...
-
尿検査の前日は自慰控えたほう...
-
口の中に黒い血の塊
-
これって喉仏ですか? 私は女性...
-
精子に血が・・・
-
中出しをするとお腹が痛い・・・。
-
納豆食べた後の尿の納豆臭は何故?
-
甲状腺腫れ
-
EXCELで式からグラフを描くには?
-
EXCELで条件付き書式で空白セル...
-
筋トレするとチンコが縮んじゃ...
-
爪が紫色?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
首吊りどこ締めるの
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
白血球が多いとどんな心配があ...
-
中出しをするとお腹が痛い・・・。
-
射精をして1週間以内に尿検査を...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
変な話しになります。尿検査で...
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
男です。昨日の午後3時くらいに...
-
今朝、毎朝の習慣でオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
1日前の検尿
-
値が入っているときだけ計算結...
-
精子が黄色?
おすすめ情報