プロが教えるわが家の防犯対策術!

こんにちは 
VBAの繰り返し転記で生き詰まっていますのでご助言お願いいたします。
やりたいことはws1のB列を参照してCD、FG列をそれぞれ対応したws2,ws3へ転記したい
と考えています。下記コードを書きましたが、うまく動作されません。お手数ですが
お判りになる方、よろしくお願いします。


Sub 文章転記()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim ws3 As Worksheet
Dim i As Variant
Dim j As Variant
Dim f As Variant

Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("ああ")
Set ws3 = Worksheets("いい")

j = 2

For i = 1 To ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Row
f = ws1.Cells(i, "B").Value
If f = "ああ" Then
ws2.Cells(j, "B").Value = ws1.Cells(i, "C").Value & ws1.Cells(i, "D").Value
ws2.Cells(j + 5, "B").Value = ws1.Cells(i, "F").Value & ws1.Cells(i, "G").Value

ElseIf f = "いい[[]*" Then
ws3.Cells(j, "B").Value = ws1.Cells(i, "C").Value & ws1.Cells(i, "D").Value
ws3.Cells(j + 5, "B").Value = ws1.Cells(i, "F").Value & ws1.Cells(i, "G").Value

j = j + 1 '一致したときだけ進めます。
End If
Next i

End Sub

「VBA繰り返し ワイルドカード」の質問画像

質問者からの補足コメント

  • 記載を忘れましたので追記させて頂きます。
    バージョンはExcel2016です。

      補足日時:2020/10/06 17:17

A 回答 (3件)

こんにちは!



横からお邪魔します。
すでに的確な回答がなされていますが・・・
どうしてもワイルドカードを使いたいのであれば
Like演算子を使う方法があります。

>ElseIf f = "いい[[]*" Then

>ElseIf f Like "いい[[]*" Then
といった感じでしょうかね?

※ 他にも
Instr関数を使っても良いと思いますが、
個の場合「含まれる」というコトになりますので、文字列の頭が決まっているのであれば
Like演算子の方が良いかもしれませんね。m(_ _)m
    • good
    • 0
この回答へのお礼

丁寧に記載していただき有難うございます。
ご指摘頂きました点を踏まえて再度挑戦してみます。

お礼日時:2020/10/06 18:03

No1です。



連投すみません。書き忘れました。

>f = "いい[[]*"
の「*」がワイルドカードのおつもりなら、ご期待のようには動作しません。
単に文字列の「*」として解釈されますので。

ワイルドカードのようなことをなさりたければ、ご提示の場合なら最初の5文字が"いい[[]"に一致するかどうかで、判断するなどに変える必要がありそうです。
あるいは、ワイルドカードそのものを使いたいのであれば、LIKE演算子 を利用するなどでしょうか。
https://docs.microsoft.com/ja-jp/office/vba/lang …
    • good
    • 0
この回答へのお礼

早急なご指摘有難うございます。
別シートへの転記の件についてはご指摘の通り、詰めて記載をしていきたいの
ですが、まだまだ理解が足りず書けなかった為、指定した状態で転記をし、空白
は詰める予定でした。(説明不足でごめんなさい)
また、ワイルドカードについてもリンクを参照してみます。

お礼日時:2020/10/06 17:21

こんにちは



なさりたいことが、イマイチ把握できないのでヒントのみです。

ws2やws3へ転記する行位置の制御に同じ変数「j」を使っているみたいですけれど、シート毎に詰めて転記してゆくのではないのでしょうか?
(例示の図ではそうなっているみたいに見えるが、どうしたいのかよくわからない)

1回の転記で「j行目」と「j+5行目」に転記されますが、5行以上ヒットする行が存在した場合には、最初の「j+5行目」(=7行目)から順に上書きされてゆくことになっていますけれど、それは構わないということでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!