• 締切済み

エクセルで検索と貼り付けのマクロを組みたい

エクセルで次のようなマクロを組みたいのですがうまくいきません。 ・C5からBB6の範囲において、Aという文字が入っているセルを検索し、その4行下1列右にコピーしておいたものを値だけ貼り付ける。 検索範囲を指定したいのは同じシート内に他にもAという文字が入っているセルがあるからです。このマクロを実行すると何故かC5からBB6の範囲以外のセルを選択し、貼り付けてしまいます。どこがいけないのでしょうか。ぜひ、教えてください。お願いします。 Range("C5:BB6").Select Cells.Find(What:="A", After:=ActiveCell, LookIn:=xlValues,LookAt:= _ xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _False, MatchByte:=False, SearchFormat:=False).select Selection.Offset(4, 1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=False

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 どうやら、日本語の解読力を必要とするようです。 マクロのコードには、質問文と整合性はありません。 ・C5からBB6の範囲から、Aという文字が入っているセルを検索する。    --Aという文字が含まれているのでしょうか?    もしそうなら、xlWhole をxlPartに換えてください。 ・その4行下1列右をコピーして、Aという文字の入ったセルに値を貼り付ける。 ということでしょうか。 ○ 一回きり、それとも、他にもAという文字が入っているセルがあるのか、分かりません。複数あるものとしました。 '------------------------------------------- Sub TestMacro1()   Dim rng As Range   Dim c As Range   Const sF As String = "A" '検索語   Set rng = Range("C5:BB6")      Set c = rng.Find(What:=sF, _   LookIn:=xlValues, LookAt:=xlWhole, _   SearchOrder:=xlByColumns, _   MatchCase:=False, _   MatchByte:=False) 'SearchFormat は抜きます。      'Application.ScreenUpdating = False   If Not c Is Nothing Then     FirstAdd = c.Address     Do       c.Value = c.Offset(4, 1).Value       Set c = rng.FindNext(c)     Loop Until c Is Nothing   End If   'Application.ScreenUpdating = True   Set rng = Nothing End Sub '-------------------------------------------  複数ある'Application.ScreenUpdating のコメントブロック(')を抜くと、検索・置換が速くなります。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.3

Sub Test1() Dim RG As Range For Each RG In Range("C5:BB6") If RG.Value = "A" Then  RG = RG.Offset(4,1).Value End If Next RG End Sub

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

次のようなマクロでどうでしょう。 With Range("C5:BB6") Set x = .Find("A") If Not x Is Nothing Then Range("BB6").Offset(4, 1) = x End If End With

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

なず最初がおかしい。 Sub test01() Range("C5:BB6").Select MsgBox Cells.Count End Sub を実行してご覧。大きな数が出るだろう。全セル選択になってしまっている。 Sub test02() MsgBox Range("C5:BB6").Cells.Count End Sub なら妥当だろう。 ーーー 重要なところなので Range("C5:BB6").Find(What:="A", After・・ にして実行して、うまく行かないか至急報告のこと。 その後はまた考える。

関連するQ&A

専門家に質問してみよう