以前ここで質問させていただきました。
http://okwave.jp/qa3029622.html
上の内容のとおり教えていただきました。
マクロにさらにタイトルを追加したいのですが可能でしょうか?
ファイルAのタイトルは5行目から始まり8行目まであります。
ファイルBのタイトルは2行目から始まり6行目まであります。
★ファイルAのタイトルにファイルBのタイトルをつけ加えたい!
以下のソースに付け加えるとしたら、どこにどのように追加すればよいですか?
以上ですがよろしくお願いいたします。
Sub findJoin()
On Error GoTo err
Dim st1 As Worksheet
Dim st2 As Worksheet
Set st1 = ActiveSheet
Workbooks.Open ("870xtd.xls")
Set st2 = Workbooks("870xtd.xls").Sheets(1)
Dim st1MaxRow As Long
Dim st2Maxrow As Long
st1MaxRow = st1.Cells(st1.Rows.Count, "A").End(xlUp).Row
st2Maxrow = st2.Cells(st2.Rows.Count, "AB").End(xlUp).Row
Dim R As Long
For R = 2 To st1MaxRow
Dim nmRng As Range
Set nmRng = st2.Range("AB2:AP" & st2Maxrow).Find(st1.Cells(R, "A").Value, LookIn:=xlValues)
If Not nmRng Is Nothing Then
'発見した。
st2.Range("A" & nmRng.Row & ":AP" & nmRng.Row).Copy Destination:=st1.Range("DQ" & R)
End If
Next
st1.Activate
Set st1 = Nothing
Set st2 = Nothing
Exit Sub
err:
MsgBox Error
End Sub
No.1ベストアンサー
- 回答日時:
こんにちは。
以前、私が回答した件でしたね。
ご質問のタイトルは
>ファイルAのタイトルは5行目から始まり8行目
>ファイルBのタイトルは2行目から始まり6行目
であり、
(1)ファイルAとファイルBで行数が異なります。検索する?
(2)ファイルAタイトルはA列に入力されていますか?
(3)ファイルBのタイトルはA列に入力されていますか?
(4)どのように結合しますか?
たとえば、
ファイルAのA5+ファイルBのB2をファイルAのDQ5に
ファイルAのA6+ファイルBのB3をファイルAのDQ6に
… 格納?
この回答への補足
大変お世話になっております。
前回に引き続きありがとうございます。
行のところは自力でどうにか、新しいマクロをつけることで
可能になりました。お手数おかけいたします。
また、質問があるのですが、お教えいただければ幸いです。
IF関数の条件にさらに、始のIF関数の結果であまったファイルBの
【taro】という文字を含むもの(例taroYamadaやtaroAbe等)を
ファイルAのシート2に同じく行ごとコピーするなどできますか?
Elseで、できるっぽいんですが良くわかりません。
また、ファイルBに同じ名前が2つ以上登録されていた場合
ファイルAへコピーするときに上書きされてしまう恐れがあるので
万が一ファイルBに同じ名前が2つ以上登録されていた場合
ファイルAへコピーされる時に行を追加、すぐ下の行にその内容を追加などできますか?
説明がわかり辛いかとおもいますが、ご了承ください。
No.3
- 回答日時:
こんばんは。
すみません。
回答するのが遅くなりました。
シート1のA列で途中に空白セルがある場合に、不正な動作を起こします。
以下の「★★」の2行を追加ください。
If st1.Cells(R, "A").Value <> Empty Then '★★
Set nmRng = st2.Range("AB2:AP" & st2maxRow).Find(st1.Cells(R, "A").Value, LookIn:=xlValues)
If Not nmRng Is Nothing Then
'発見した。
InsertRow = findLoop(st1, st2, R, st2maxRow, nmRng) '★
st1maxRow = st1maxRow + InsertRow - 1 '終了行数を補正 '★
R = R + InsertRow - 1 '検索位置補正 '★
Else '★
Set nmRng = st2.Range("AB2:AP" & st2maxRow).Find("taro", LookIn:=xlValues) '★
If Not nmRng Is Nothing Then '★
'taroを発見 '★
InsertRow = findLoop(st1, st2, R, st2maxRow, nmRng) '★
st1maxRow = st1maxRow + InsertRow - 1 '終了行数を補正 '★
R = R + InsertRow - 1 '検索位置補正 '★
End If
End If
End If '★★
※すでに、解決していましたら無視してください。
この回答への補足
すみません。
お礼のところの
>ファイルBの内容が丸ごとファイルAの行にコピーされてしまいます。
は条件でそう出ていたみたいです。私の勘違いです。申し訳ないです。
本当に色々とありがとうございました。
まだマクロのことがまったくわからないので質問することがあるかもしれませんがそのときはよろしくお願いいたします。
ご回答ありがとうございます。
エラーが表示させず、条件通り表示ができるようになりました。
ただ、マクロを実行するとファイルBの内容が丸ごとファイルAの行にコピーされてしまいます。
やりたいことは、きるようになったので不要な行は削除すれば問題ないのでいいのですが、もしお分かりになるようでしたら教えていただけると幸いです。
本当に色々とありがとうございます。
No.2
- 回答日時:
こんにちは。
こんな感じでどうでしょうか?
(1)見つからない場合に【taro】という文字を検索。
(2)複数見つかった場合は、下に行追加する。
'★のコメントは変更部分です。
Sub findJoin()
On Error GoTo err
Dim st1 As Worksheet
Dim st2 As Worksheet
Set st1 = ActiveSheet
Workbooks.Open ("870xtd.xls")
Set st2 = Workbooks("870xtd.xls").Sheets(1)
Dim st1maxRow As Long
Dim st2maxRow As Long
st1maxRow = st1.Cells(st1.Rows.Count, "A").End(xlUp).Row
st2maxRow = st2.Cells(st2.Rows.Count, "AB").End(xlUp).Row
Dim InsertRow As Long
Dim R As Long
R = 2 '★
While R <= st1maxRow '★
Dim nmRng As Range
Set nmRng = st2.Range("AB2:AP" & st2maxRow).Find(st1.Cells(R, "A").Value, LookIn:=xlValues)
If Not nmRng Is Nothing Then
'発見した。
InsertRow = findLoop(st1, st2, R, st2maxRow, nmRng) '★
st1maxRow = st1maxRow + InsertRow - 1 '終了行数を補正 '★
R = R + InsertRow - 1 '検索位置補正 '★
Else '★
Set nmRng = st2.Range("AB2:AP" & st2maxRow).Find("taro", LookIn:=xlValues) '★
If Not nmRng Is Nothing Then '★
'taroを発見 '★
InsertRow = findLoop(st1, st2, R, st2maxRow, nmRng) '★
st1maxRow = st1maxRow + InsertRow - 1 '終了行数を補正 '★
R = R + InsertRow - 1 '検索位置補正 '★
End If
End If
R = R + 1 '繰り返し回数を更新 '★
Wend
st1.Activate
Set st1 = Nothing
Set st2 = Nothing
Exit Sub
err:
MsgBox Error
End Sub
'★ 以下追加
Function findLoop(ByVal st1 As Worksheet _
, ByVal st2 As Worksheet _
, ByVal R As Long _
, ByVal st2maxRow As Long _
, ByVal nmRng As Range) As Long
On Error GoTo err
findLoop = 0 '追加行数を初期化
Dim stopAddr As String
stopAddr = nmRng.Address 'Findの終了判定アドレス
Do
findLoop = findLoop + 1 '発見回数をカウント
If findLoop > 1 Then
'複数発見した場合に行を追加
st1.Rows(R + 1).Insert Shift:=xlShiftDown
R = R + 1 'ファイルAの格納位置は追加行へ
End If
'発見した行をCopy
st2.Range("A" & nmRng.Row & ":AP" & nmRng.Row).Copy Destination:=st1.Range("DQ" & R)
'次を検索
Set nmRng = st2.Range("AB2:AP" & st2maxRow).FindNext(nmRng)
If nmRng Is Nothing Then
'発見できないので終了
Exit Do
End If
Loop While nmRng.Address <> stopAddr
Exit Function
err:
MsgBox Error
End Function
この回答への補足
いつも、ご回答ありがとうございます。
エラーはでないのですが、このマクロを実行するとCPUの使用が50%以上になりグルグルとパソコンが回りマクロが、いつまでも修了しません。
もし、なにかお分かりになりましたら教えていただけたら幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) countifsについての質問 3 2023/03/08 13:45
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- Visual Basic(VBA) ワークブック内すべて検索 2 2022/12/20 20:13
- Visual Basic(VBA) select caseの入れ子 3 2023/03/08 18:48
- Visual Basic(VBA) Worksheet_Change 4 2023/03/12 21:54
- Excel(エクセル) マクロで列を加えたら上手くいかなくなりました。 2 2022/05/23 17:59
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windowsのエクスプローラーで大...
-
VBA 数値を文字列として貼付したい
-
VBA:ユーザーフォームのマルチ...
-
cerファイル、pfxファイルの基...
-
AUTOCAD
-
Google ドライブに意図しないフ...
-
A4ファイルを綺麗に並べる方法...
-
拡張子sfvってなんですか?
-
「最小化」したファイルが元の...
-
Macにある音声ファイルをiPhone...
-
開かなくなった引き出しの開け方
-
FlukeのLANテスター flwファイ...
-
WPSスプレッドシートでエラー。...
-
plgファイルの開き方
-
BIOSアップデート
-
CELファイルを開くには
-
WEBで検索して閲覧したファイル...
-
エクセルの一時ファイルの表示...
-
pdfファイルをネットワークプリ...
-
ドライブからのダウンロードの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 数値を文字列として貼付したい
-
VBA:ユーザーフォームのマルチ...
-
cerファイル、pfxファイルの基...
-
Google ドライブに意図しないフ...
-
"~$[ファイル名].xlsx"というフ...
-
開かなくなった引き出しの開け方
-
A4ファイルを綺麗に並べる方法...
-
拡張子sfvってなんですか?
-
AUTOCAD
-
plgファイルの開き方
-
WPSスプレッドシートでエラー。...
-
「最小化」したファイルが元の...
-
Windowsでbattery reportのファ...
-
ギガファイル便で送ったzipファ...
-
WEBで検索して閲覧したファイル...
-
DVDやBDの画像をHDDに取り込む...
-
オフィス内のA4ファイルが倒れ...
-
BIOSアップデート
-
FlukeのLANテスター flwファイ...
-
こういうごついファイルってダ...
おすすめ情報