dポイントプレゼントキャンペーン実施中!

エクセルで次のようなマクロを組みたいのですがうまくいきません。

・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

A 回答 (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 のコメントブロック(')を抜くと、検索・置換が速くなります。
    • good
    • 1

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
    • good
    • 0

次のようなマクロでどうでしょう。


With Range("C5:BB6")
Set x = .Find("A")
If Not x Is Nothing Then
Range("BB6").Offset(4, 1) = x
End If
End With
    • good
    • 0

なず最初がおかしい。


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・・
にして実行して、うまく行かないか至急報告のこと。
その後はまた考える。
    • good
    • 0

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