• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルのVBA「当てはまる場合、コピー」の方法)

エクセルのVBA「当てはまる場合、コピー」の方法

このQ&Aのポイント
  • エクセルのVBAを使用して、「当てはまる場合、コピー」を行う方法についてお尋ねします。具体的には、A列に番号が連続している場合、B列に番号を入力し、該当する行のC列に「OK」という文字を入力する方法を知りたいです。
  • イメージとしては、会員の来場情報を管理する際に使用することを想定しています。A列には会員番号が入力されており、B列には来場した会員の番号を入力します。ボタンを押すと、B列で入力した番号に対応する行のC列に「来場」という文字を自動的に入力する方法を教えてください。
  • コピーペーストのVBAやVLOOKUP関数にはある程度の知識がありますが、どのようにVBAを使用すればよいか分かりません。お手数ですが、アドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! >ボタンを押すとB列で・・・ とありますので、コマンドボタンを配置しているとしての一例です。 お示しのようにデータは1行目からあるとします。 Private Sub CommandButton1_Click() Dim i, k As Long Application.ScreenUpdating = False Columns(3).ClearContents For k = 1 To Cells(Rows.Count, 2).End(xlUp).Row For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 1) = Cells(k, 2) Then Cells(i, 3) = "OK" End If Next i Next k Application.ScreenUpdating = True End Sub ※ 「OK」の部分を「来場」と変更しても良いかと思います。 こんな感じではどうでしょうか?m(_ _)m

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

明らかに関数を使った方が簡単です(あるいはA列に条件付き書式を設定して,来場された番号セルの色を塗ってみるなどでも)が,そこを敢えてマクロを使うなら,こんなこともできます。 手順: シートを開く シート名タブを右クリックしてコードの表示を選ぶ 現れたシートに下記をコピー貼り付ける private sub worksheet_change(byval Target as excel.range)  dim h as range  dim c as range  set target = application.intersect(target, range("B:B"))  if target is nothing then exit sub  for each h in target   if h <> "" then   set c = range("A:A").find(what:=h.value, lookin:=xlvalues, lookat:=xlwhole)   if c is nothing then    msgbox h.value & " is not registerd"    h.interior.color = vbred   else    c.offset(0, 2) = "OK"   end if   end if  next end sub ファイルメニューから終了してエクセルに戻る A列を準備した後,B列にどんどん記入していく。 #折角マクロを使うのなら ・未登録の番号がB列に記入されたら警告する ・既にB列に記入済みの番号が再度記入されたら警告する ・単にOKと出力するんじゃなく,たとえば記入時刻を記録してみる など,色々思いつくまま応用を効かせてみてください。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です! たびたびごめんなさい。 投稿後に思ったのですが・・・ VBAでなくても関数の方が簡単だとおもいます。 C1セルに =IF(COUNTIF(B:B,A1),"OK","") という数式を入れあらかじめオートフィルでずぃ~~~!っと下へコピーではダメでしょうか? 何度も失礼しました。m(_ _)m

関連するQ&A

専門家に質問してみよう