忙しい現代人の腰&肩のお悩み対策!

Private Sub Worksheet_Change(ByVal Target As Range)

  Dim eiji As String

  eiji = Target.Address
  eiji = Left(Target.Address, 2)
  eiji = Right(eiji, 1)

  If eiji = "B" Then
    If Target.Text = "" Then
      Range("A1").Value = "B-clear"
    End If
  End If

  If eiji = "C" Then
    If Target.Text = "" Then
      Range("D1").Value = "C-clear"
    End If
  End If

End Sub

上記は、C、B列の値がDeleteキーなどで空欄になった場合に文字を出力するコードです。
最初にTarget.Addressから英字部だけを抜き出し(少々ムリヤリですが)、
それを判断基準に以降の処理をしています。

この時B1:C1のように範囲選択してDeleteキーを押された場合に、
どちらの処理(今回の例だと"B-clear"と"C-clear"の表示)も行いたいのですが、
その場合どのように記述したらよいでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

Option Explicit



Private Sub Worksheet_Change(ByVal Target As Range)

Dim eiji As String
Dim Cell
Dim i As Integer
i = 0
For Each Cell In Target

i = i + 1
If Cell.Column = 2 Then
If Cell.Formula = "" Then
Range("A1").Value = "B-clear"
End If
End If

If Cell.Column = 3 Then
If Cell.Formula = "" Then
Range("D1").Value = "C-clear"
End If
End If
Next

End Sub



わざわざ英文字を取り出してみなくてもいいのでは?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
正常に動作しました。
ただ、このサンプルを自分の目的のコードに当てはめるのに難航しております。
サンプル作り間違えた…。

>わざわざ英文字を取り出してみなくてもいいのでは?
このサンプルコードでは意味無かったですね。
実際に使いたいコードでは必須(だと思い込んでいる)であり、
素人ゆえか数字より英字の方がわかりやすいので(言い訳してもしょうがないですが)。

とにかく、正常に動きました。
ありがとうございました。

お礼日時:2007/07/25 21:31

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル イベントマクロ Changeイベントを複数作りたい

Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub

以下マクロの内容

End Sub

これでセルA1が変わるとイベントマクロが発生しますが
セルB1が変わると別のマクロが発生し
セルC1が変わるとまた別のマクロが発生し…とするには
どうすればよいのですか
単純に並べて書いたらだめみたいだったんですけど

Aベストアンサー

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$A$1"
 A1のマクロ文
Case "$B$1"
 B1のマクロ文
Case "$C$1"
 C1のマクロ文
・・・・
End Select
End Sub
こんな感じでは?

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む


人気Q&Aランキング

おすすめ情報