• ベストアンサー

Rows("3836:3836").Selec

お世話になります。 エクセルVBAで Rows("3836:3836").Select の数字の部分を変更するにはどうしたら良いでしょうか? Rows("Mdata:Mdata").Select Rows("& Mdata & ":" & Mdata &").Select では、エラーとなってしまいます。 変数の処理って私には難しいです。 よろしくお願いします。

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8528/19386)
回答No.2

Rows(Mdata & ":" & Mdata).Select で良いです。 「Formula =」に与える文字列とは違うので「素直にそのまま」で良いです。 前回の質問の「Formula =に文字列として指定する」のとは違いますから、頭を切り替えましょう。

oasis701s
質問者

お礼

ありがとうございます なかなか切り替えが難しいのですね。 明日、会社で試してみます。 いつもありがとうございます

その他の回答 (3)

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

Sub test01() 'Rows("Mdata:Mdata").Select mdata = 4 Rows(mdata & ":" & mdata).Select End Sub を やってみること。第4行目を選択するよ。 Rows()の括弧内は数値で指定する。 Rows("Mdata:Mdata").Select は()内が文字列になっているので不可。 --- Sub test02() mdata: mdata = 4 Rows(mdata & ":" & mdata).Select End Sub とでもしない限り通らないだろう。mdata: mdata = 4は不自然。 参考に Sub test03() mdata: mdata = "4:5" Rows(mdata & ":" & mdata).Select End Sub --- Sub test04() x = "4:5" Rows(x).Select End Sub test03はダメで test04はOK. >変数の処理って私には難しいです マクロの記録から始めたような場合は、そういう過程はあるだろう。 プログラムとは「変数の学である」。学習をやめるか、繰り返してなれるか。 こういう文字列と数字の引数の指定表現の違いも、エクセルで気を利かしてくれる場合もあったりするので、慣れて覚えていくしかない。 この働きの機序を、よく知った人は理屈を通して説明するかもしれないが。 >Rows("3836:3836").Select の数字の部分を変更するにはどうしたら良いでしょうか? この3836は何の数字なん崗。説明する必要がある。 たとえばある合計が入っている行とか。それなら人間が3836と書くのではなくて、 別途VBAのスキルを使ってその行(番号)を割り出さなくてはならない。プログラムの中で できるだけこういう具体的な数値は避けたくなってくる。セル範囲に名前付けというのをしたりしてね。コードを読む人が意味をつかみにくいからだ。 2つ3826を並べる意味が意図的なのかどうかわからない。1つでも同じではないか。 ーー 1回限りの変更なら数字を変えて記述すればよい。 変数化するなら Sub test08() x = "11" Rows(x).Select End Sub Sub test09() x = 11 y = CStr(x) '文字列化 Rows(y).Select End Sub Sub test10() x = 11 Rows(x).Select End Sub もOK しかし Sub test11() Rows(5:8).Select End Sub はエラー。 ーーー とびとび複数行を選択するなら Sub test06() Application.Union(Rows(3), Rows(8)).Select End Sub 連続した行の場合は Sub test07() Rows("5:8").Select End Sub CTRLキーを押して、行を追加選択するのは Sub test13() Range("3:3,7:7").Select Range("A7").Activate End Sub の("3:3,7:7").のような文字列を()内に作る必要がある。

oasis701s
質問者

お礼

ありがとうございます 様々なアプローチがあるおですね。 凄く学習になります。

回答No.3

こんにちは。お邪魔します。 直接の回答としては、   Rows(Mdata & ":" & Mdata).Select のようになりますが、   "3836:3836" 文字列での参照に拘るのでしたら、   Range("3836:3836").Select   ↓   Range(Mdata & ":" & Mdata).Select とするか、 或いはRowsの平易な使い方として、、   Rows(3836).Select   ↓   Rows(Mdata).Select とするのが普通のやり方です。 「行単位での処理が必要」というような特殊な場面でもない限りは、 Rangeで指定するように覚えておいた方が紛れがないですし、アクセスも僅かながら速いです。   単行を指定するのか/区間としての複数行を指定するのか   行範囲として指定して行単位で処理したいのか/セル範囲としてセル単位で処理したいのか 条件や目的によって使い分けが必要な場面もありますので、覚えておいてください。 「単行を指定」して「行単位で処理する」(.Selectする) という場合なら、   Rows(3836).Select のように、行位置を表すインデックスとしての数値を指定するのが、 普通に簡単な方法です。 区間としての複数行の場合は、よくあるFor Each ... Next ループなどの例として、 ' ' /// Sub ReW9099719() Dim c As Range Dim FirstRow As Long, LastRow As Long   FirstRow = 3836   LastRow = 3842   For Each c In Rows(FirstRow & ":" & LastRow) '    行単位の処理     c.Select ' 例として、行が選択されます。     MsgBox c.Row & "行めを選択" ' 例としてメッセージボックス     Exit For ' 例として、ひとつめの行を選択したらループを抜けます。   Next   For Each c In Range(FirstRow & ":" & LastRow) '    セル単位の処理     c.Select ' 例として、セルが選択されます。     MsgBox c.Address(0, 0) & " を選択" ' 例としてメッセージボックス     Exit For ' 例として、ひとつめのセルを選択したらループを抜けます。   Next   For Each c In Rows(FirstRow & ":" & LastRow).Cells '    セル単位の処理     c.Select ' 例として、セルが選択されます。     MsgBox c.Address(0, 0) & " を選択" ' 例としてメッセージボックス     Exit For ' 例として、ひとつめのセルを選択したらループを抜けます。   Next End Sub ' ' /// のように目的に適う指定(参照)方法を選べるようにしておかないと、 意図した通りに処理されないことも起こりますから留意しておいてください。 以上です。

oasis701s
質問者

お礼

ありがとうございます いやーこんなに親切に、 素晴らしい。 凄く、勉強になります。

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.1

Rows("" & Mdata & ":" & Mdata & "").Select としてみてください。 ダブルクォーテーションを文字として扱う場合には "" と2個続けます。

oasis701s
質問者

お礼

ありがとうございます こういうやり方もあるのですね。 勉強になります。 明日、会社で試します。

関連するQ&A

  • VBAのRows.Selectについて

    すみません。知っていれば教えてください。 Rows.Selectで、行をしてしたいと考えています。 行番号は変数gyouに代入されています。 そこで、普通であれば、Rows("4:4").select で指定できると思うのですが、今回、Rows("gyou:gyou").select にしたいです。 ただ、””でくくっているので、Gyouを数字ではなく文字列で認識するらしく、型がちがいますというエラーがでてきます。 どうすれば、変数で指定できのでしょうか? すみませんが、教えてください。

  • エクセル VBA の行選択

    エクセルVBAで行を選択する場合 Rows(1,1).select Range(Cells(2,2),Cells(5, 5)).EntireRow.Select の方法があると知りました。 この数値の部分に変数を入れるとエラーがでてしまいました。 どうすれば変数で行を選択することができるのか教えてください。 2003を使用しております。

  • rows関数

    ROWS関数の〔〕の中には数字だけしか駄目なのでしょうか? 例えば以下のように変数を入れて対応したい場合どうすればいいのでしょうか? Rows ("1:3") ↓ a = 10 Rows ("a:3")

  • エクセル VBA Rowsプロパティ?

    エクセル VBAにて ある列の空白セルを調べて空白があった場合 行全体を選択して削除したいため、下記のように書き込みました。 Dim idx As Integer For idx = 5 To 2204 If ActiveSheet.Cells(idx, 2) = "" Then Rows("idx:idx").Select Selection.Delete Shift:=xlUp End If Next idx Rows("idx:idx").Selectが間違っていると思うのですが 変数を使用しての行指定がわかりません。 どなたかご教示お願いいたします。

  • エクセル VBAで複数行の選択

    エクセル2002使用です。 VBAで変数を使って複数行の選択で、6行目から9行目までを選択したいのです。 sub macro2() Dim rw As Integer rw=8 Rows("rw - 2:rw + 1").Select end sub だとエラーになります。 Rows("6:9").Select のようにしたいのですがどこが悪いのでしょうか? よろしくお願いします。

  • Rows("20:20").Selectについて

    よろしくお願いします こんな簡単なことが分かりません どなたか教えてください マクロを記録すると Rows("20:20").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove と記録されました また Private Sub Worksheet_Change(ByVal Target As Range)内のマクロで Debug.Print Target.Row と書くと 20が表示されます そこで Rows("20:20").Select の20をTarget.Rowに置き換えるには、マクロではどう書いたらよいでしょうか 色々試しましたがエラーで進みません うまく表現できていませんが、どなたか教えてください  

  • 行の削除

    excel VBA行の削除をしたい。 (質問) どこがまちがいでどう直せばよいか。教えてください。よろしくお願いします。 Rows("268:271").Select Selection.Delete Shift:=xlUp のイメージで Rows("last_depth+1:d").Select Selection.Delete Shift:=xlUp として実行したら型が一致しないエラー 記述で""を取り Rows(last_depth+1:d).Select Selection.Delete Shift:=xlUp としてもコンパイルエラーとなります。 なおlast_depth、dはともに  dim xx As long で定義の変数

  • SQL_CALC_FOUND_ROWSのネスト

    こんにちは。 下記のようにSQL_CALC_FOUND_ROWSをネスト し、上位のSELECT文で、FOUND_ROWS() で 件数を取得しようとするとエラーになり、困ってお ります。 SELECT FOUND_ROWS() AS A FROM(SELECT SQL_CALC_FOUND_ROWS 1 FROM T_TABLE) AS A; どのようにネストしたSQL_CALC_FOUND_ROWS から件数を取得すればよいのでしょうか? ご教授お願い致します。

  • rowsとlinesの違い

    今,あるファイルから一部分を抜き出す,というようなプログラムを製作中です. そこで,(ふつう英語でつけられる)変数名について疑問に思いました. たとえば,あるファイルの,121行から150行を抜き出したいとしたとき, start_line=121 end_line=150 number_of_rows=30 というような名前の変数名にしているのですが,number of rowsとnumber of linesのどちらが英語的に正しいのかがわかりません. この場合,lineとrow,どちらが正しいのでしょうか.

  • エクセルVBAで、範囲指定を変数でしたいとき

    Rows(\"10:20\").select という記述が可能ですが、この10と20を変数ro1とro2で指定したいのですが、Rows( ro1 & ":" & ro2).select ではエラーになってしまいます。 どのようにすれば良いでしょうか?