• 締切済み

Excel Macro セル範囲の設定方法

コラムFGに予め数式を入れておき、コラムFHから右横にスクロールしていって数式のはいっているセルを見つけたら、1セル分だけ左側に戻し、FHからその1セル分左側に戻ったセル番地を範囲とし、その範囲内にあるセル(この範囲内にあるセルは全て空白セル)にFGの数式をコピーしたく、以下のようなマクロを書いてみました。 Range("FG" & ROWNUM).Select Selection.Copy Range("FG" & ROWNUM).End(xlToRight).Select ActiveCell.Offset(0, -1).Select LEFTCELL = Range("FH" & ROWNUM).Address RIGHTCELL = ActiveCell.Address Range("LEFTCELL" & ":" & "RIGHTCELL").Select Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False (ROWNUMは行数の変数で、これをLOOPさせ、複数行に同じ処理をする) これで大体やりたいことはわかって頂けると思うのですが 多分Range("LEFTCELL" & ":" & "RIGHTCELL").Select のところがどうもまずいようでうまく動いてくれません。どうすればよいか教えてください。 ちなみになぜこういうことやろうとしているというと、右側にスクロールした時に数式のはいっているセルの列位置が行によって違うからです(でも起点列はいつも同じ)。 よろしくお願いいたします。

みんなの回答

  • tttmhappy
  • ベストアンサー率27% (11/40)
回答No.4

Range("LEFTCELL" & ":" & "RIGHTCELL").Select は Range(LEFTCELL & ":" & RIGHTCELL).Select でよいと思います。変数扱いなのに、””でLEFTCELL と RIGHTCELL を囲っているので文字として認識されちゃっています。

sdguy1973
質問者

お礼

ありがとうございました。

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.3

コードは見てないけど Cells(行番号,列番号) Range(Cells(開始行番号,開始列番号),Cells(終了行番号,終了列番号)) の形式のほうが素直でシンプルになると思うけど。

sdguy1973
質問者

お礼

ありがとうございました。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

回答は出てますが、 こういった場合は、Selectは不要ですし、 データが多いといちいちSelectすると処理スピードが落ちますので Selectは必要最小限にしましょう。 '------------------------------------------------- Sub test()  Dim Rownum As Long  Dim Clm As Integer For Rownum = 1 To 3   Clm = Cells(Rownum, "FG").End(xlToRight).Offset(, -1).Column   Cells(Rownum, "FG").Copy   Range(Cells(Rownum, "FH"), Cells(Rownum, Clm)).PasteSpecial _     Paste:=xlPasteFormulas, Operation:=xlNone, _     SkipBlanks:=False, Transpose:=False Next Rownum Application.CutCopyMode = False End Sub '-------------------------------------------- 以上です。

sdguy1973
質問者

お礼

ありがとうございました。

  • FEX2053
  • ベストアンサー率37% (7995/21384)
回答No.1

> Range("LEFTCELL" & ":" & "RIGHTCELL").Select これじゃあ「LEFTCELL」「RIGHTCELL」って文字列になってしまい、 変数扱いにはなりませんよ。おまけにLEFTCELLの中身は「$FH$4」など という文字列になってる筈で、このやり方では列名を持ってこれません。 ですので例えば RIGHTCELL=CStr(ActiveCell.Column) とかで文字列変数として「列番号」を持ってくれば Range(LEFTCELL & ":" & RIGHTCELL).Select で予想通り「Range(4:4)」などになって選択できると思うんですが。 すいません、検証はしてませんので発想だけ、ということで。

sdguy1973
質問者

お礼

ありがとうございました。

関連するQ&A