Excel VBAで長い構文を折り返す方法は?

このQ&Aのポイント
  • Excel VBAを使用して長い構文を折り返したい場合、セルの途中で構文を区切って表示する方法があります。しかし、単純に区切るだけではエラーが発生することもあります。もっとスマートな方法を知りたいです。
  • Excel VBAの長い構文を折り返す方法について教えてください。セルの途中で構文を区切って表示するためにはどうすればいいですか?試した方法ではエラーが発生しました。
  • Excel VBAで長い構文を折り返す方法について教えてください。セルの途中で構文を区切るための記号や記法があるのでしょうか?エラーを回避しつつ、見やすい形で構文を書きたいです。
回答を見る
  • ベストアンサー

Excel VBA 長い構文を折り返したい

いつもお世話になっています。 タイトル通りの質問です。 下記のような複数のセルを選択して削除という構文ですが、セルの途中で構文を区切って 見やすくしたいと思います。 Range("E4,G4,F6:G6,T8,S10,S12,S15,S18,S20,S22,G25,K25,O25,H28,L28,H29,L29,L31,H32,L32,H33,L33,L34,H40,L41,L42,H43,L44").Select Selection.ClearContents そこで、 Range("E4,G4,…H28 _  ※半角スペース&アンダーバー L28…").Select Range("E4,G4,…H28" _  ※ダブルクォーテーション&半角スペース&アンダーバー "L28…").Select と試してみましたが、エラーもしくは実行エラーになります。 区切らずそのままか、構文を二つにわけるのであれば動くのでそれでもいいのですが、 もっとすっきりした方法があるのではないかと気になります。 ご存じの方教えてください。

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

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

方法1: Range("E4,G4,F6:G6,T8,S10,S12,S15,S18,S20," _ & "S22,G25,K25,O25,H28,L28,H29,L29,L31,H32," _ & "L32,H33,L33,L34,H40,L41,L42,H43,L44").Select Selection.ClearContents あるいは Range("E4,G4,F6:G6,T8,S10,S12,S15,S18,S20," _ & "S22,G25,K25,O25,H28,L28,H29,L29,L31,H32," _ & "L32,H33,L33,L34,H40,L41,L42,H43,L44").ClearContents などのように。 方法2: Range("E4,G4,F6:G6,T8,S10,S12,S15,S18,S20,S22,G25,K25,O25,H28,L28,H29,L29,L31,H32,L32,H33,L33,L34,H40,L41,L42,H43,L44").Select を行い,要するに目的のセル範囲をとりあず選択した状態でワークシート画面に戻ります. 名前ボックスに TargetRng のように名前を記入し,Enterしてセル範囲に名前を付けます または挿入メニュー(数式タブ)の名前の定義で名前を付けます #名前を付ける範囲を間違えた/修正/編集したい時は,挿入メニュー(数式タブ)の名前の定義(名前の管理)で修正します マクロは range("TargetRng").clearcontents のように,範囲に定義した名前によって操作します。 #この方法は無尽蔵に沢山の飛び飛び領域に対して出来るワケではありませんが,ご相談に書かれた程度であれば対応できます。

suzupen
質問者

お礼

このたびも早々に丁寧な回答いただきありがとうございます。 スマートで期待していたとおりの解決方法で大変感謝しています。 また機会がありましたらよろしくお願いいたします。

その他の回答 (2)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一例です。 前半 = "E4,G4,F6:G6,T8,S10,S12,S15,S18,S20,S22,G25,K25,O25,H28" 後半 = "L28,H29,L29,L31,H32,L32,H33,L33,L34,H40,L41,L42,H43,L44" Range(前半 & ", " & 後半).ClearContents

suzupen
質問者

お礼

早々に回答いただきありがとうございます。 さっそく試してみましたところ、結合セルが含まれている場合はエラーとなりました。 今回は&を入れる方法を教えていただきこちらで解決いたしましたが 方法として是非活用させていただきます。 また機会がありましたらよろしくお願いいたします。

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

カンマを付けてから半角スペース&アンダーバーとしてみてはいかがでしょう。 Range("E4,G4,…H28,_  ※半角スペース&アンダーバー L28…").Select

suzupen
質問者

お礼

早々に回答いただきありがとうございます。 実は試作のところに記述していなかったのですが、カンマを付けてから半角スペース&アンダーバーでも エラーが表示されます。 &を入れる方法を教えていただきこちらで解決いたしました。 また機会がありましたらよろしくお願いいたします。

関連するQ&A

  • Excel VBA 行を折り返すとエラー

    いつもお世話になっています。 下記のように複数セルを選択して削除する構文を書きました。 これ自体は問題ないのですが、セルの数が多いので途中で折り返すように 記述しなおすと、エラーになります。 なぜなのかわかりません。 基本的な質問で申し訳ありませんが、よろしくお願いいたします。 Sub リセット() Range("G4,F6:G6,T8,S10,S12,S15,S18,S20,S22,G25,K25,O25,L34,H36,L35,L36,H37,L37").Select Selection.ClearContents End Sub 書き換えた構文 Sub リセット() Range("G4,F6:G6,T8,S10,S12,S15,S18,S20,S22,G25", _ "K25,O25,L34,H36,L35,L36,H37,L37").Select Selection.ClearContents End Sub

  • エクセルVBAで教えて下さい。

    A1のセルに [ 1- 5] 4.05398e-01 3.63385e-01 -2.22992e-01 9.89158e-03 -6.43695e-02 A2のセルに [ 6-10] -5.12224e-04 4.07480e-04 -2.73746e-04 -1.77853e-02 -2.13805e-03 A3のセルに [11-15] -6.88489e-03 -2.06765e-02 -9.44633e-03 6.97059e-03 -1.28400e-02 と、このような感じでA7セルまで同じ感じでスペースで空いた数値が入力されています。 A8のセルのみ [36-37] -6.39210e-03 -1.55806e-03 と入力されております。 まず行いたいのはスペースが空いてる部分で、それぞれの数値を各セルに分けたいです。 A1のセルに入力されている [ 1- 5] 4.05398e-01 3.63385e-01 -2.22992e-01 9.89158e-03 -6.43695e-02 ならば A1に[1-5] B1セルに4.05398e-01 C1セルに3.63385e-01 のように これをA1からA8のセルで行ったあと指定のセルを30行目に貼り付けます。 E1→A29 C2→B29 D2→C29 E2→D29 E3→E29 F3→F29 B4→G29 D5→H29 E5→I29 F5→J29 貼り付けのデータは増えていきます。つまり、30行目にデータが入ってる場合は そのデータが1行下の行に下がり、新たなデータが30行目に追加されます。 このようにして、データが最大で58行目まで追加される可能性があります。 最小であれば30行目、31行目の2つしかない場合あります。 この時、0の近似値を各列のセルから探し、当てはまるセルを赤く塗り潰すというのが 今回行いたいことです。 A列ならA30~A58までの中で0の近似値を探し、当てはまるセルを赤く塗り潰す。 ただ空白の場合は無視してもらいたいです。0の近似値だと空白が選択されてしまうので。 近似値探しの前までならマクロがありますのでご参照下さい。 Sub Macro4() ' ' Macro4 Macro ' ' Range("A1:A8").Select Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _ FieldInfo:=Array(Array(0, 1), Array(7, 1), Array(21, 1), Array(34, 1), Array(47, 1), _ Array(60, 1)), TrailingMinusNumbers:=True Range("A1").Select Range("E1").Select Selection.Copy Range("A29").Select ActiveSheet.Paste Range("C2:E2").Select Application.CutCopyMode = False Selection.Copy Range("B29").Select ActiveSheet.Paste Range("E3:F3").Select Application.CutCopyMode = False Selection.Copy Range("E29").Select ActiveSheet.Paste Range("B4").Select Application.CutCopyMode = False Selection.Copy Range("G29").Select ActiveSheet.Paste Range("D5:F5").Select Application.CutCopyMode = False Selection.Copy Range("H29").Select ActiveSheet.Paste Range("J7").Select Application.CutCopyMode = False Range("A29:K29").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("A29:K29").Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Range("A29").Select Range("A1:F8").Select Selection.ClearContents Range("A1").Select Range("K29").Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Selection.NumberFormatLocal = "G/標準" End Sub わかりずらい質問ですみませんが、ご指導の程 お願い致します。

  • エクセルVBAで

    いつもお世話になります。 Range("a1:C5,E5:H10").Select Selection.ClearContents この選択範囲をそれぞれ5列ずつづらしていきたいのですがfor文を使って出来るでしょうか? セルが1つならcells(1,5n)とすればいいのですが,範囲が連続で複数の場合(rangeを使った場合)はどうすればいいのでしょうか。

  • エクセルVBAの構文の質問です。

    エクセルVBAの構文の質問です。 グラフを作るのに列が固定ではないので記録マクロでは一部変更しなくては成らなくてその変更が上手く行きません、構文を記します。 Range("E11:E42").Select Charts.Add ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("E11:E42") ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" 上記が記録マクロの構文ですそのRange文をCells文に変えたのが以下です。 Range("Cells(r2, c3), Cells(r3, c3)).Select Charts.Add ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range(Cells(r2, c3), Cells(r3, c3)) ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" Range文が2ヶ所有ると思いますが最初の文はOKで2回目のRange文で以下の以下のエラーが出ます。 「'Cells'メソッドは失敗しました。'Global'オブジェクト」 「r2 c2 r3 c3」はそれぞれ変数で上の方でr2=3とかc2=9と言う風にセル位置を与えています どちら様か当方の悩みを解決してください、宜しくお願い致します。

  • エクセルのVBAで悩んでいます。

    いつもありがとうございます。 エクセルのVBAで悩んでいます。 セルの範囲指定をVBAで行いたいのです。 ただし、引数に数値変数を使用する為、Cellsプロパティを使います。 すると、離れている範囲の範囲指定が出来ないのです。 例えば、Rangeプロパティだと、 Range("A5:E5,A9:E32").Select こうなるところを、 A9:E32 を変数に置き換えたくて、 Range("A5:E5", Cells(g, 1), Cells(h, 5)).Select と、するとエラーが出ます。 VBAの前文は次の通りです。 Private Sub CommandButton1_Click() a = Me.TextBox1.Value b = Me.TextBox2.Value Set c = Range("a:a").Find(what:=a, LookIn:=xlValues, lookat:=xlWhole) Set d = Range("a:a").Find(what:=b, LookIn:=xlValues, lookat:=xlWhole) 'MsgBox c + d e = c.Address 'MsgBox e f = d.Address 'MsgBox f g = Range(e).Row MsgBox g h = Range(f).Row MsgBox h Range(Cells(g, 1), Cells(h, 5)).Select End sub よろしくお願い致します。

  • エクセルマクロ構文で初歩的な質問ですが・・・

    いつもお世話になっています。 マクロ構文で初歩的な質問なんですが Sheet1 がアクティブになっている状態で Sheet2 の セルC9 を選択する場合 Sheets("Sheet2").Range("C9").Select この様にマクロを記述したらエラーになります。 Sheets("Sheet2").Select Range("C9").Select 2行に分けて、書けばうまく動作するのですが 最初の構文は何故エラーになるのでしょう どなたか、分りやすく説明して頂けませんでしょうか

  • Excel VBA

    いつもお世話になっております。 ExcelのVBAの処理にてお聞きしたいのですが… Ret = MsgBox("項目を全て削除しますが、よろしいですか?", vbYesNo, "削除") If Ret = vbYes Then Worksheets("入力").Select Range("C10:I59").ClearContents Range("L10:R59").ClearContents Range("W10:Y59").ClearContents Range("AB10:AH59").ClearContents Range("AM10:AO59").ClearContents Range("AR10:AX59").ClearContents Range("BC10:BE59").ClearContents   ・   ・   ・ と長々しく書いているのですが、これをもっとスマートに 書く方法はありますか?? それから、こういったことが出来るなら教えて頂きたい のですが、、、 あるExcelのシート(1枚)を、所定のディレクトリに入って いるExcelファイル(数十ファイル)のシートの先頭に全て挿入して いくといったものなのですが、VBAで出来ますか?? 出来なくとも、近い感じの処理または、参考文献などあったら 教えて下さい。 宜しくお願い致します。

  • EXCEL VBA Array要素記述を変更したい

    プログラムの中にセルの値を直接記入しているところがあます。 Select Caseの行の 「Array("101", "102", "103", "104")」のとろです。 プログラムには101, 102, 103, 104ではなくB10~B13を使用したいのですが、うまくできません。 実際には4つだけではなく何十個もあって作業がわずらわしくなるのと、ブックごとに値が異なって 汎用性がないためです。 アドバイスいただけると助かります。 初歩的なことを質問しているかも入れませんが、よろしくお願いいたします。 シート名「表紙」のA列は部品番号(=シート名)でA10:101 A11:102 A12:103 A13:104とします。 これに対応したシートが4つあり、シート名は、「101」「102」「103」「104」とします。 使用者は「表紙」のシートで下記の作業を行います。 B6セルには製造番号(例:AM01-130012)を入力します。 B10~B13セルは「○」「×」を入力規則から選択します ○を選択した隣のC10~C13セルは部品個数で1~9の数値を入力規則から選択します。 ○を選択したのと同じ行のD10~L10、D11~L11、D12~L12、D13~L13セルに、 文字列を入れる場合と入れない場合があります。文字列は左のD列から順に入れます。 下記マクロにて「○」となっているシートのみコピーを作成します。(1) コピーしたシートすべてのB1セルに製造番号を入力します。(2) D列に文字列があれば、コピーした対応するシートの中のH3~P3セルへ貼り付けます。(3) C列の値によって、コピーした対応するシートの中のH3~P3セルの値をクリアします。(4) <表紙のシート>    A     B     C    D     E     F    G    H     I     J     K      L 5 6    AM01-130012 7 8 9  10 101    ×    9 11 102    ○    3 12 103    ○    8  A1-1  A1-2  A1-3  A1-4  A1-5  A1-6  A1-7  A1-8   13 104    ×    9 <プログラム> Sub TestSample() Dim c As Range Dim 製造番号 As String Dim flg As Boolean flg = True With ThisWorkbook 製造番号 = .Worksheets("表紙").Range("B6").Value For Each c In .Worksheets("表紙").Range("B10:B13") If c.Value Like "○*" Then ' ' (1) If flg Then '  初めてなら、○に対応したシートを「新しいブックにコピー」 .Worksheets(c.Offset(, -1).Text).Copy flg = False Else '  それ以外なら、○に対応したシートをアクティブブックの最後にコピー追加 .Worksheets(c.Offset(, -1).Text).Copy After:=Worksheets(Worksheets.Count) End If ' ' (2) ' ' コピーしたすべてのシート(のB2)に製造番号を書き込む Range("B1").Value = 製造番号 ' ' (3) ' ' ○の行のD:L を 対応するシートのH3:P3 へ貼り付け If c.Offset(, 2) <> "" Then '  D列が空でなければ Range("H3").Value = c.Offset(, 2).Value Range("I3").Value = c.Offset(, 3).Value Range("J3").Value = c.Offset(, 4).Value Range("K3").Value = c.Offset(, 5).Value Range("L3").Value = c.Offset(, 6).Value Range("M3").Value = c.Offset(, 7).Value Range("N3").Value = c.Offset(, 8).Value Range("O3").Value = c.Offset(, 9).Value Range("P3").Value = c.Offset(, 10).Value End If End If Next c End With ' ' (4) For Each 各シート In Worksheets With 各シート .Activate Select Case ThisWorkbook.Worksheets("表紙").Cells(Application.Match(各シート.Name, Array("101", "102", "103", "104"), 0) + 9, "C").Value Case "1" '1のときの仕事をする Range("I3:P3").Select Selection.ClearContents Case "2" '2のときの仕事をする Range("J3:P3").Select Selection.ClearContents Case "3" '3のときの仕事をする Range("K3:P3").Select Selection.ClearContents Range("J3").Select Case "4" '4のときの仕事をする Range("L3:P3").Select Selection.ClearContents Case "5" '5のときの仕事をする Range("M3:P3").Select Selection.ClearContents Case "6" '6のときの仕事をする Range("N3:P3").Select Selection.ClearContents Case "7" '7のときの仕事をする Range("O3:P3").Select Selection.ClearContents Case "8" '8のときの仕事をする Range("P3").Select Selection.ClearContents Case "9" 'do nothing Case Else End Select End With Next If flg Then MsgBox "部品番号が選択されていません。" Exit Sub End If

  • ExcelのVBAのAutoFillの使い方について

    Excel97のマクロでAutoFillを使おうとしているのですが、エラーが出て実行できません。 何も表示されていないシートでコマンドボタンを押すと、AutoFillを使ってA1セル~E1セルとA2セル~E2セルに数字の1~5が表示されるようにしたいと考えています。 下記のようにマクロを書いたところ、A1~E5はうまくできたのですが、 「Selection.AutoFill Destination:=ActiveCell.Range("A2:E2"), Type:=xlFillSeries」 の行でエラーが発生します。 「実行時エラー:1004 RangeクラスのAutoFillメソッドが失敗しました。」と表示されます。 Private Sub CommandButton1_Click()   ActiveSheet.Range("A1").Select   ActiveCell.FormulaR1C1 = "1"   Selection.AutoFill Destination:=ActiveCell.Range("A1:E1"), Type:=xlFillSeries   ActiveSheet.Range("A2").Select   ActiveCell.FormulaR1C1 = "1"   Selection.AutoFill Destination:=ActiveCell.Range("A2:E2"), Type:=xlFillSeries End Sub どなたかエラーの原因を教えていただけないでしょうか? よろしくお願いいたします。

  • エクセルVBA ClearContentsで入力規則が消える?

    さきほどこのような質問を偶然見つけました。 http://odn.okwave.jp/qa2912139.html Range("A2:G50").Select  Selection.ClearContents で、セルに設定してあった入力規則が消えるようなのです。 しかし、わたしのエクセル2000では、入力規則も条件付書式も消えません。 ひょっとして、2007ではそのように変わったのでしょうか?

専門家に質問してみよう