2つのブックがあり、book1のE列の値をbook2のB列で検索し、
ヒットした行はbook1のP列の値をbook2のH列に入力したいです。
しかしbook2のB~F列の一部が結合されており、結合セルに対しては検索が機能せず、確実にある値でも「該当なし」となってしまいます。
(結合は行ごとに横方向のみ。縦結合はありません)
結合を解くと正常に動くため、それが原因なのは間違いないのですが、
フォーマット上、結合を解除しないまま入力しないとならず、行き詰まっております。
色々と調べましたが解決できず、ご存知の方いらっしゃいましたら、何卒ご教授頂けますと幸いです。
Sub test()
Dim sh1 As Worksheet, sh2 As Worksheet
Dim r1 As Long, r2 As Long
Dim fnd As Range
Dim sid As Variant, sname As String
Dim mes As String
Set sh1 = ActiveWorkbook.Sheets(1)
Set sh2 = Workbooks("test.xls").Sheets(1)
With sh1
For r1 = 2 To .Cells(Columns.Count, 1).End(xlUp).Row
sid = .Range("E" & r1).Value
sname = .Range("E" & r1).Offset(, 1).Value
Set fnd = sh2.Range("B:B").Find(What:=sid, LookIn:=xlValues, LookAt:=xlPart)
If fnd Is Nothing Then
mes = mes & sname & vbCrLf
Else
r2 = fnd.Row
sh2.Range("P" & r2).Value = sh1.Range("H" & r1).Value
End If
Next r1
If mes = "" Then
MsgBox "入力終了"
Else
MsgBox mes & "該当なし"
End If
End With
End Sub
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
こんばんは
FIND以外で各セルを検索する方法は既に出ているので、ご提示の方法にほぼ近い方法を・・
どこかの空き列を作業列としてB列の値を一旦コピーして、そちらの列から検索し、終わったら消去する方法です。
ご提示のコードに2行ほど追加することで、ほぼそのままで済むものと思います。
空き列がわかっていればその列に、不定の場合はUsedRange+1列目にするか、最終列(大抵は使っていない)を利用するなど。
具体的には・・
例えば、X列が空き列とわかっているとして、事前に(=ループの外で)
sh2.Columns("X").Value = sh2.Columns("B").Value
としておけば、X列に結合のない状態でB列の値がコピーされます。
検索はこのX列に対して行い、検索が終わったら
sh2.Columns("X").ClearContents
とすることで、X列の値はクリアされます。
No.3
- 回答日時:
こんばんは
上から合致した行№を取得する為のFindのようなので
あっさりFindを諦めて 配列で行№に相当する値を取得してみるのはどうでしょう。
Sub sample()
Dim sh1 As Worksheet, sh2 As Worksheet
Dim r1 As Long, r2 As Long, i As Long
Dim sid As Variant, sname As String
Dim mes As String
Dim Ary
Set sh1 = ActiveWorkbook.Sheets(1)
Set sh2 = Workbooks("test.xls").Sheets(1)
Ary = sh2.Range(sh2.Cells(1, 2), sh2.Cells(Rows.Count, 2).End(xlUp))
With sh1
For r1 = 2 To .Cells(Columns.Count, 1).End(xlUp).Row
sid = .Range("E" & r1).Value
sname = .Range("E" & r1).Offset(, 1).Value
r2 = 0
For i = 1 To UBound(Ary, 1)
If Ary(i, 1) Like "*" & sid & "*" Then
r2 = i
Exit For
End If
Next
If r2 = 0 Then
mes = mes & sname & vbCrLf
Else
sh2.Range("P" & r2).Value = sh1.Range("H" & r1).Value
End If
Next r1
If mes = "" Then
MsgBox "入力終了"
Else
MsgBox mes & "該当なし"
End If
End With
End Sub
xlPart・・
If Ary(i, 1) Like "*" & sid & "*" Then については検討が必要かも
No.2
- 回答日時:
要件的に、下記のようにするとことは不可ですかね?
Set fnd = sh2.Range("B:B").Find(・・・
↓
Set fnd = sh2.Range("B:F").Find(・・・
No.1
- 回答日時:
こんばんは。
セルの結合と、マクロは相性が悪く、色々とトラブルの元になりますね。
直接の回答ではありませんが、1つの解決方法としてですが、
book2のシートを新しいブックにコピーして、結合を全て解除する。
book1のE列の値を新しいブックのB列で検索し、ヒットした行はbook1の
P列の値をbook2のH列に入力する。
処理が少し面倒ですが、3つのブックをマクロで処理するが良いかと。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Find でオートメーションエラー(エラー440)が出ました 1 2021/11/09 21:22
- Visual Basic(VBA) Excel VABについて 1.xlsm、VBA.xlsm2つのファイルがあり、1.xlsmにてVB 6 2021/12/13 17:46
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Excel(エクセル) VBA Scripting.Dictionary 連想配列 複数参照する方法 2 2021/12/17 01:52
- Visual Basic(VBA) EXCEL VBA シート貼り付け 3 2021/11/15 12:33
- Visual Basic(VBA) ワークシート内 検索 HITしたら すべて選択する 6 2021/11/11 22:50
- Visual Basic(VBA) VBA EXCELからメールを送る方法について 5 2021/11/04 06:30
- Visual Basic(VBA) 条件をつけて 抽出 7 2021/12/14 14:37
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Excel(エクセル) マクロを修正できないものか、統合シートについて 3 2021/12/07 09:26
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
結合セルの中身を検索する
Excel(エクセル)
-
結合させた状態で、vbaで列番号を取得する方法
Excel(エクセル)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
findは動くがfindnextがマクロで動きません。記述は同じはずなのですが…
Visual Basic(VBA)
-
5
VBAでの結合セルのコピー&ペースト
Excel(エクセル)
-
6
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
7
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
8
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
9
【excelVBA】Findメソッドで検索対象を複数列
Excel(エクセル)
-
10
エクセルでエラーが出て困っています。
Excel(エクセル)
-
11
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
12
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
13
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
14
WorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】
Excel(エクセル)
-
15
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
16
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
17
split関数で区切り文字がない場合
Visual Basic(VBA)
-
18
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
19
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
20
EXCEL VBA マクロ 実行する度に処理速度がどんどん遅くなる原因が知りたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Changeイベントでの複数セルの...
-
エクセル 2つの表の並べ替え
-
エクセルでフォームのチェック...
-
VBAを使って検索したセルをコピ...
-
【VBA】2つのシートの値を比較...
-
文字列の結合を空白行まで実行
-
VBAコンボボックスで選択した値...
-
マクロ 最終列をコピーして最終...
-
VBA 値と一致した行の一部の列...
-
URLのリンク切れをマクロを使っ...
-
Excelで、あるセルの値に応じて...
-
VBAでのリスト不一致抽出について
-
マクロについて。S列の途中から...
-
エクセルVBA intersect colu...
-
VBマクロ 色の付いたセルを...
-
VBAを用いて条件付きの平均値、...
-
データグリッドビューの一番最...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
VBAのコードを教えてください
-
VBAを使って検索したセルをコピ...
-
B列の最終行までA列をオート...
-
エクセルvbaについて
-
vba 2つの条件が一致したら...
-
Excelで、あるセルの値に応じて...
-
VBA UserFormからの転記で
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
エクセルVBAにて =A1=B1とすれ...
-
【VBA】2つのシートの値を比較...
-
データグリッドビューの一番最...
-
VBマクロ 色の付いたセルを...
-
VBAで指定範囲内の空白セルを左...
おすすめ情報