いつもお世話になっております。
以前に投稿をさせていただきましたgitmykと申します。
http://oshiete.goo.ne.jp/qa/7563274.html
前回はご回答くださり誠にありがとうございます。
この場で感謝申し上げます。
内容を精査させていただきましたので、再度投稿させていただきます。
問題(1)
Sheet2のA列に[範囲指定文字]、B列に[検索文字]、C列に[入力文字]が複数入っている。
Sheet1を[範囲指定文字]で検索しCurrentRegionで範囲指定する。
範囲指定した全てのセルに対し、[検索文字]の上から順に検索していく。
該当セルがあれば、右4セルoffsetし、対応する[入力文字]を入力する。
([検索文字]と[入力文字]は1対1で対応している)
問題(2)
Sheet2のA列に[範囲指定文字]、B列に[検索文字1]、C列に[検索文字2]、D列に[入力文字]が複数入っている。
Sheet1を[範囲指定文字]で検索しCurrentRegionで範囲指定する。
範囲指定した全てのセルに対し、[検索文字1]の上から順に検索していく。
該当セルがあれば、右2セル上1セルoffsetしたセルを対応する[検索文字2]で検索し、双方が一致した場合のみ[検索文字1]で検索した該当セルから、右に4セルoffsetしたセルに、対応する[入力文字]を入力する。
([検索文字1]と[検索文字2]、[入力文字]は対応している)
問題(3)
Sheet1を[範囲指定文字]で検索し下に1セルoffsetした位置をCurrentRegionで範囲指定した場合。
上記内容をExcelVBAでどのように記載すればよいか、ご教授くださいませんでしょうか。
VBA学習中です。
何卒宜しくお願いいたします。
No.3ベストアンサー
- 回答日時:
No.2です。
補足を読ませていただきました。
最初の質問に
>CurrentRegionで範囲指定する。
とありましたので、回答も CurrentRegion を使用しました。
範囲指定の列方向はAX列まであるというコトは判りましたが、
行方向はどこまでが範囲になるか決まっているのでしょうか?
仮に↓の画像で
Range("C6").CurrentRegion.Select
というマクロを実行すると
画像のように範囲指定されます。
(C6はB3~D12に変更しても範囲指定はすべて一緒です)
その辺が判るともっと具体的なアドバイスができると思うのですが・・・
次に
>If r = ws.Cells(i, 2) Then '←ここに問題2の条件を「and」で付け加える
>の部分は
>If r = ws.Cells(i, 2) AND r.Offset(-1, 2) = ws.Cells(i, 3) Then
>でよろしいでしょうか
に関してはおそらく大丈夫だと思います。
これも具体的な配置が判らないのでご自身でマクロを試してみて、もしダメなら
どのようにダメだったのかが判れば具体的なアドバイスはできると思います。
この程度でごめんなさいね。m(_ _)m
この回答への補足
tom04様
何度もありがとうございます。
行については、どこからどこまでと決定しているわけではありませんので、
[検索文字]で検索した位置からと考えておりました。
行については選択されるようですが、C列が丸ごと開いてしまっておりまして、そこで止まっておりました。
A列に関しては、[検索文字]から下に番号で文字が埋まります。
実際に表を見ていただければ、「あーこれですか笑」ってわかっていただけそうなんですが、
データ自体が、機密性が高いもので、なかなかでき無いのです…
(今年中になんとかしないといけない、大流行のものです)
tom04様
Selection.Resize(, Selection.Columns.Count + 48).Select
で、範囲を拡大したところ、無事入力成功いたしました!!!
ありがとうございました!!!
貴方は本当に素晴らしいプログラマーです!
また今後EXCELでわからないことがございましたら、是非ともお助けくださいますとうれしい限りです。
ありがとうございました!
No.4
- 回答日時:
No.2・3です。
>行については選択されるようですが・・・
とありますので、
とりあえずAX列までやってみました。
問題1のコードです。
Sub test2()
Dim i, j, k As Long
Dim c As Range
Dim ws1, ws2 As Worksheet
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
For k = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row
For Each c In ws1.UsedRange
If c = ws2.Cells(k, 1) Then
c.CurrentRegion.Select
For i = Selection(1).Row To Selection(Selection.Count).Row
For j = Selection(1).Column To 50
If ws1.Cells(i, j) = ws2.Cells(k, 2) Then
ws1.Cells(i, j).Offset(, 4) = ws2.Cells(k, 3)
End If
Next j
Next i
End If
Next c
Next k
End Sub
>For i = Selection(1).Row To Selection(Selection.Count).Row
が行方向の範囲指定部になりますので、
問題3の
>[範囲指定文字]で検索し下に1セルoffsetした位置・・・
に適応させたい場合は
>For i = Selection(1).Row+1 To Selection(Selection.Count).Row+1
のようにすれば CurrentRegion で範囲指定された行全体が1行下がってLoopされます。
※ 列方向に関しては CurrentRegion で範囲指定された最初の列~AX列までループさせています。
※ こんな感じではどうでしょうか?m(_ _)m
No.2
- 回答日時:
こんにちは!
操作するのはSheet1で、Sheet2に検索文字等が入っているSheetとします。
Sheet2は1行目がタイトル行でデータは2行目以降にあるとして・・・
こういうコトですかね?
(問題1)のコードです
Sub test1()
Dim i As Long
Dim c, r As Range
Dim ws As Worksheet
Set ws = Worksheets("Sheet2")
For i = 2 To ws.Cells(Rows.Count, 1).End(xlUp).Row
For Each c In Worksheets("Sheet1").UsedRange
If c = ws.Cells(i, 1) Then
c.CurrentRegion.Select '←問題3はここを変更
For Each r In Selection
If r = ws.Cells(i, 2) Then '←ここに問題2の条件を「and」で付け加える
r.Offset(, 4) = ws.Cells(i, 3)
End If
Next r
End If
Next c
Next i
End Sub
※ 問題2に関してはほとんど同様のコードで、
コード内に載せてあるコメントの条件を付加すればOKだと思います。
※ 問題3に関してはコードを
>c.CurrentRegion.Offset(1).Select
としてはどうでしょうか?
内容を取り違えていたらごめんなさいね。m(_ _)m
この回答への補足
毎回お返事くださいまして誠にありがとうございます。
重大な見落としをしておりまして、CurrentRegionでは、C列のセルが空で横が全て選択されませんでした;;
横はAX列までございます。
If r = ws.Cells(i, 2) Then '←ここに問題2の条件を「and」で付け加える
の部分は
If r = ws.Cells(i, 2) AND r.Offset(-1, 2) = ws.Cells(i, 3) Then
でよろしいでしょうか?
もう一歩な気がしております。
いろいろと穴のある前提条件ですみませんけれども、何卒宜しくお願いいたします。
No.1
- 回答日時:
sub macro1()
dim h1 as range
dim h2 as range
dim target as range
’範囲指定文字の検索
for each h1 in worksheets("Sheet2").range("A1:A" & worksheets("Sheet2").range("A65536").end(xlup).row)
set target = worksheets("Sheet1").cells.find(what:=h1, lookin:=xlvalue, lookat:=xlwhole)
if not target is nothing then
set target = target.currentregion
for each h2 in target
’以下の部分が問題ごとのバリエーションなので、適切に検討してください。
if h2 = h1.offset(0, 1) then
h2.offset(0, 4) = h1.offset(0, 2)
end if
next
end if
next
end sub
問題3は通常意味のない指定なので、見直してください。
この回答への補足
ご回答くださり誠にありがとうございます。
なぜか、インデックスが有効な範囲にありません
Set target = Worksheets("auD").Cells.Find(what:=h1, LookIn:=xlValue, lookat:=xlWhole)
と出ます。
おそらく、範囲の指定に私の前提が漏れていたのだと思います。
誠に申し訳ございません。
スクリプトは是非とも今後のご参考にさせていただきたく存じます。
誠にありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/08 09:05
- Excel(エクセル) Excelでの検索結果を含む行だけを表示させたい 5 2023/03/10 17:08
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Excel(エクセル) 条件に合った数値の合計を表示させたい関数と条件指定の方法 3 2023/05/13 16:07
- Visual Basic(VBA) vba 15 2023/04/07 12:33
- Excel(エクセル) エクセルの関数で質問です。 3 2023/02/24 14:07
- Visual Basic(VBA) WordのVBAについて 5 2023/01/11 14:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル マクロ オートフィ...
-
特定の文字がある行以外を削除...
-
アクティブになっている行をマ...
-
直近の5個の平均を求めたい
-
このような複雑な表をワードで...
-
Excel ウインドウ枠の固定をす...
-
Excel 時刻の並び替え
-
エクセルのセルに指定画像(.jpg...
-
EXCELでセルの数値をすべて小数...
-
(エクセルVBAマクロ)オーバーフ...
-
Excelで非表示のセルをとばして...
-
AのセルとB行を比較して、一致...
-
エクセル マクロ等を利用した各...
-
罫線の斜線を自動で引くマクロ
-
excel 同じ番号のデーターを横...
-
excelのデータで色つき行の抽出...
-
エクセルマクロで偶数行(又は...
-
エクセル2016で時間を入力して...
-
エクセル2003のVBAで列を指定
-
VBAで色の付いているセルの行削除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
[EXCEL]ボタン押す→時刻が表に...
-
結合されたセルをプルダウンの...
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
AのセルとB行を比較して、一致...
-
エクセル 上下で列幅を変えるには
-
Excel ウインドウ枠の固定をす...
-
特定の文字がある行以外を削除...
-
エクセル2016で時間を入力して...
-
excelのデータで色つき行の抽出...
-
excel 小さすぎて見えないセル...
-
EXCELで最後の行を固定
-
VBAで色の付いているセルの行削除
-
エクセルVBA 最終行を選んで並...
-
エクセルマクロで偶数行(又は...
-
エクセルのセルに指定画像(.jpg...
-
罫線の斜線を自動で引くマクロ
おすすめ情報