セルC3から最終行(LASTROWという変数に格納されています)までの間に
何らかの文字が入力されたら、隣り合うD列の同じ行に下記数式を入力させたいです。
=IFERROR(VLOOKUP(C3,THEMA!A:B,2,FALSE),"")
※上記数式内の「C3」は入力されたセルの行に応じて変更させたいです。
例えばC5に文字が入力されたら、D5には=IFERROR(VLOOKUP(C5,THEMA!A:B,2,FALSE),"")
VBA初心者です。
ネットでセルに文字が入力されたら実行させるマクロ例を見て作ろうと思ったのですが、
下記????部分にどのような構文を用いればいいのかわからず質問させて頂きました。
Private Sub Worksheet_Change(ByVal Target As Range)
LASTROW = Cells(Rows.Count, "A").End(xlUp).Row
If Target.Column = 3 Then
If Target.Row >= 3 And Target.Row <= LASTROW Then
????
End If
End If
End Sub
VBA使うのであればわざわざVLOOKUP使わなくても・・・と言う場合は数式には
拘りありません。VLOOKUPと同等の処理ができればOKですのでその点もご教授
お願いいたします。
No.4ベストアンサー
- 回答日時:
続けてお邪魔します。
結局、C・L列で同様の動きにしたい!というコトですね。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastRow As Long, c As Range
If Intersect(Target, Range("C:C,L:L")) Is Nothing Then Exit Sub
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
If Target.Count > 1000 Then Exit Sub
For Each c In Target
With c
If .Row > 2 And .Row <= lastRow Then
If .Value <> "" Then
If .Column = 3 Then
.Offset(, 1).Formula = "=IFERROR(VLOOKUP(RC[-1],THEMA!C[-3]:C[-2],2,False),"""")"
Else
.Offset(, 1).Formula = "L列の数式"
End If
Else
.Offset(, 1).ClearContents
End If
End If
End With
Next c
End Sub
※ L列の数式が判らないので
その部分はご自身で数式を入れてください。m(_ _)m
No.3
- 回答日時:
No.2です。
>複数この処理を実施したい場合は・・・
C列複数セルに対応したい!というコトですね。
↓のコードに変更してみてください。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastRow As Long, c As Range
If Intersect(Target, Range("C:C")) Is Nothing Then Exit Sub
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
For Each c In Target
With c
If .Row > 2 And .Row <= lastRow Then
If .Value <> "" Then
.Offset(, 1).Formula = "=IFERROR(VLOOKUP(RC[-1],THEMA!C[-3]:C[-2],2,False),"""")"
Else
.Offset(, 1).ClearContents
End If
End If
End With
Next c
End Sub
※ 注意点として
C列をループさせていますので、
極端に多くの行数(例えば列全体など)を一気に消去した場合などは
「応答なし」になってしまうと思います。
セル数の制限などを追加すれば大丈夫です。
たとえば1000セルに限定する場合は
>lastRow = Cells(Rows.Count, "A").End(xlUp).Row
の次に
>If Target.Count > 1000 Then Exit Sub
の1行を追加しておけば列全体を消去しても大丈夫だと思います。
ただ、この場合はD列は空白に見えても数式はそのまま残っています。m(_ _)m
ありがとうざいます。
複数同時に消しても動作しました。
私の言葉足らずですみません。
C列以外(例えばL列)も同じように隣り合うセルに数式(数式は少し変わりますVLOOKUP参照の
シート名が異なる)を入力したい場合はどのように表記すれば良いかというのが№2へのコメントでした。
もしよろしければご教授頂けると助かります。
No.2
- 回答日時:
こんばんは!
今回の場合はR1C1形式の方が対応が簡単だと思います。
一例です。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastRow As Long
If Intersect(Target, Range("C:C")) Is Nothing Or Target.Count > 1 Then Exit Sub
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
With Target
If .Row > 2 And .Row <= lastRow Then
If .Value <> "" Then
.Offset(, 1).Formula = "=IFERROR(VLOOKUP(RC[-1],THEMA!C[-3]:C[-2],2,False),"""")"
Else
.Offset(, 1).ClearContents
End If
End If
End With
End Sub
>なお、一度入力した文字を消す時もあります。
>その時は隣のセルは空白にしたいです。
というコトですが、数式そのものでで「空白」になりますが
とりあえず数式も消去するコードにしています。
(1セルずつ対応するコードのためにC列データを複数行を一気に消去しても対応していません。)
ありがとうございました。
複数この処理を実施したい場合は下記のように追加していけば良いでしょうか?
二つ目のブロックでブレークしても止まらなかったのに処理されていたので心配になりました。
※文字数制限のため数式部分を@@にしてます。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastRow As Long
If Intersect(Target, Range("C:C")) Is Nothing Or Target.Count > 1 Then Exit Sub
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
With Target
If .Row > 2 And .Row <= lastRow Then
If .Value <> "" Then
.Offset(, 1).Formula = "@@"
Else
.Offset(, 1).ClearContents
End If
End If
End With
If Intersect(Target, Range("L:L")) Is Nothing Or Target.Count > 1 Then Exit Sub
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
With Target
If .Row > 2 And .Row <= lastRow Then
If .Value <> "" Then
.Offset(, 1).Formula = "@@"
Else
.Offset(, 1).ClearContents
End If
End If
End With
End Sub
No.1
- 回答日時:
>までの間に
その各行についてですね、その中のいずれかの行のセルに文字入力があれば、そのセルの隣のセルのみに数式を・・・・・と解釈します
文字入力する列はc列とすれば、となりのd列の各行に関数で処理すれば。
C4に、If(C3=””,””,IFERROR(VLOOKUP(C5,THEMA!A:B,2,FALSE),""))
ただし?、です。
ありがとうございます。
説明不足すみません。
現状関数を埋め込んでいますが、行数が多いため関数を埋め込んでおくとファイルサイズが
大きくなるので関数を止めてマクロで処理したかったのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) エクセルのイベントプロシージャーでF列の最終行のセルの入力をトリガーにしたいのですが 1 2022/10/14 09:36
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
vba:特定のセルに入力したと同時に隣のセルの値を特定のセルの下の行に自動入力したい_No.2
Excel(エクセル)
-
ある列のセルに特定の文字が入っていたら他のセルに決まった文字を入れる
Word(ワード)
-
-
4
EXCEL あるセルに数字が入力されれば既存マクロ実行させたい
Excel(エクセル)
-
5
エクセルVBAで、値が入っている最終行の、右隣の値をコピーして、別のセルに貼り付けるコード
Excel(エクセル)
-
6
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
7
エクセルVBA 作業後に選択範囲を解除する方法
Excel(エクセル)
-
8
エクセルで上の行の値を自動的にコピーする
Excel(エクセル)
-
9
ExcelのVBAで連番を振る。
Excel(エクセル)
-
10
特定のセルが空白だったら、その行を非表示にしたい。。。
Visual Basic(VBA)
-
11
VBAで「セルに何か入っている場合」
Windows Me・NT・2000
-
12
空白セル内の数式を残したままで空白セル扱いとしたいのですが
Excel(エクセル)
-
13
あるセルに特定の文字列を打つと、他のセルに決められた文字が自動入力するように
Excel(エクセル)
-
14
[初心者です]VBAで指定列からAを検索し、発見したら隣のセルに値0を入れるマクロ。
Access(アクセス)
-
15
Exel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について
Visual Basic(VBA)
-
16
「選択範囲を解除してアクティブセルを選択」をマクロで行うにはどうすればよいでしょうか
Excel(エクセル)
-
17
VBA A1セルが空白になったら隣のセルも空白に
Excel(エクセル)
-
18
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
19
VBAでユーザーフォームにセル値を表示させるには
Visual Basic(VBA)
-
20
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
【Excel関数】UNIQUE関数で"0"...
-
エクセル マクロ オートフィ...
-
結合されたセルをプルダウンの...
-
[EXCEL]ボタン押す→時刻が表に...
-
罫線の斜線を自動で引くマクロ
-
Excel グラフのプロットからデ...
-
アクティブになっている行をマ...
-
エクセルマクロで偶数行(又は...
-
エクセル 上下で列幅を変えるには
-
完全一致したら代入するマクロ...
-
AのセルとB行を比較して、一致...
-
【EXCEL】連続データの個数を抽...
-
A1に入力された文字列と同じ文...
-
エクセルマクロ オートSUM(合...
-
VBAで色の付いているセルの行削除
-
【VBA】「同じ文字を含むセ...
-
Excel ウインドウ枠の固定をす...
-
電話番号の入力方式が違うデー...
-
エクセル 数字のみ残したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
結合されたセルをプルダウンの...
-
[EXCEL]ボタン押す→時刻が表に...
-
excel 小さすぎて見えないセル...
-
AのセルとB行を比較して、一致...
-
エクセル マクロで数値が変っ...
-
エクセル 上下で列幅を変えるには
-
excelのデータで色つき行の抽出...
-
Excel グラフのプロットからデ...
-
エクセル2016で時間を入力して...
-
VBAで色の付いているセルの行削除
-
特定の文字がある行以外を削除...
-
連続データが入った行の一番右...
-
エクセルVBA 最終行を選んで並...
-
エクセルのセルに指定画像(.jpg...
-
エクセルで昨日までの日付デー...
-
エクセルマクロで偶数行(又は...
-
A1に入力された文字列と同じ文...
おすすめ情報
なお、一度入力した文字を消す時もあります。
その時は隣のセルは空白にしたいです。