• 締切済み

EXCELでVBAを使って複数の列を選びたい

EXCELで、自分が希望する複数の列を選択し非表示にしたい。 これをマクロを使ってやりたいのですが、どうすればいいのかわかりません。 希望する列の入力はINPUTBOXを使えばいいのかなって思います。仮に開始列番号と終了列番号を入力したとして、その複数列を選択し非表示にするというコマンドが何かよくわからないのです。ちなみに、R1C1形式でもA1形式でもどちらもやりたいです。 すごく初歩的な質問だと思いますが、何卒よろしくおねがいします。

みんなの回答

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

Range("A:A,C:C,E:E").Select Selection.EntireColumn.Hidden = True VBAを勉強するのに、方法論として、「マクロの記録」を活用しましょう。私はこれに非常にお世話になりました。 ツール--マクロ--新しいマクロの記録でやります。 好きな列を飛び飛びに掴むには、ctrlキーを押しながら例えばA列、C列、E列の列記号の部分をクリックします。 非表示にするには、書式--列--表示しないの操作です。 ツール--マクロ--記録終了で止めます。 そしてツール--マクロ--VisualBasicEditorをクリックし、標準モジュールをクリックするとModule1が現れ、そこをクリックすると上記のようなVBAが現れます。

  • peso
  • ベストアンサー率41% (40/97)
回答No.2

ユーザーフォームを使ってみてはどうでしょうか? 次のものはユーザフォームに テキストボックスの textbox1 と textbox2 があり、 コマンドボタンの hiddenbutton というものがある場合、 hiddenbutton を押したときに指定した列 (textbox1とtextbox2に指定) を非表示にします。 A1形式とR1C1形式どちらでも指定できますが、その他のエラー処理をしていないため、 変な値(1000やZZZや%&'等)を指定するとエラーになります。 Private Sub hiddenbutton_Click() Dim select_clm1, select_clm2 As String Dim dummy, textvalue As Integer If IsNumeric(textbox1) = True Then textvalue = Val(textbox1.Value) dummy = Int(textvalue / 26) If dummy = textvalue / 26 Then dummy = dummy - 1 End If If dummy = 0 Then select_clm1 = "" Else select_clm1 = Chr(dummy + 64) End If select_clm1 = select_clm1 & Chr(textvalue - dummy * 26 + 64) Else select_clm1 = textbox1.Value End If If IsNumeric(textbox2) = True Then textvalue = Val(textbox2.Value) dummy = Int(textvalue / 26) If dummy = textvalue / 26 Then dummy = dummy - 1 End If If dummy = 0 Then select_clm2 = "" Else select_clm2 = Chr(dummy + 64) End If select_clm2 = select_clm2 & Chr(textvalue - dummy * 26 + 64) Else select_clm2 = textbox2.Value End If Columns(select_clm1 & ":" & select_clm2).Hidden = True End Sub

  • kougasha
  • ベストアンサー率32% (34/105)
回答No.1

 Columns("A:C").Hidden = True これで、A~C列は非表示になるでしょ。   マクロプログラマーの基本である、「マクロの記録」 をやってみたのですか? まず、自分がやりたい動作を「マクロの記録」で記録 してみて、記録されたマクロの処理を解析して修正す る。 これは、基本中の基本ですよ。

sizuka
質問者

補足

早速のご回答ありがとうございます。 ご指摘の「マクロの記録」はもちろんやりました。 ですので Columns("A:C").Hidden = True はわかりましたが、この「A」や「C」をx$、y$といった入力変数にしたいのです。単純にColumns("x$:y$").Hidden = True ではだめですよね・・・ また私は、A1形式とR1C1形式と両方ともよく使うので、R1C1形式での方法も知りたいのです(ご回答はA1形式ですよね)。 すみませんがよろしくお願いします。

関連するQ&A

  • excel vba inputbox

    初心者です。質問させて下さい。 inputboxでhelpを参照すると、typeの指定は以下ですが、 値 意味 0 数式 1 数値 2 文字列 (テキスト) 4 論理値 (True または False) 8 セル参照 (Range オブジェクト) 16 #N/A などのエラー値 64 数値配列 やはり、図形を選択させる事は不可能でしょうか? 具体的には、 マクロ実行中にinputboxを表示させて、図形を選択させ、図形名を表示させて、その図形を既定の図形に設定させたいと思っています。 図形を一つ選択した状態ならば、その図形の名前は以下のコードのように取得できるのですが、inputboxでは図形がなぜか選択できないです。 そもそも、inputboxを使用しようと思ったのは、他のコマンドやツール等が非選択状態になること、またマクロ実行の途中で一時中断することができ、これらの条件は便利だし必要だと思ったからです。 inputboxは何かで設定を変える等で図形を選択できるのでしょうか?無理でしょうか? また、代替的なものは他にあるのでしょうか? Sub testA() Dim Def As Object Set Def = Excel.Selection If TypeOf Def Is Excel.Rectangle Then MsgBox (Def.Name) End If End Sub 無理な質問かもしれませんが、どなたか御教授お願い致します!

  • エクセルVBAによりメッセージボックスを表示させた場合について

    お世話になっております。 エクセルVBAにより、メッセージボックスを表示させた場合についてお尋ねいたします。 マクロ上にて、にある項目をINPUTBOXにて対象の列を選択して、それをMSGBOXにて”はい”もしくは”いいえ”にて確認する形式にしているのですが、選択した列が画面上見えない場合もあるのですが、その場合画面をスクロールして対象列が正しいのかを確認したいのですが、MSGBOXがアクティブになっており、スクロールさせる事ができなくて 困っております。そもそもできるのかどうかすら わからないので、エクセルの仕様上それはできないのであれば、しょうがないのですが、もし可能であれば ご教授ください。 宜しくお願い致します。

  • VBA 工程表(スケジュール表)の作成 複数日程

    お世話になっております。 http://www.syswat.com/soft/ep05kote.html 上記フリーソフト?Excelのようなものを作ろうとしています。 考えていることとして、 D 予定開始 E 予定終了 F 実際開始 G 実際終了 H列:AQ列 カレンダー というものになっております。 カレンダーの一番左(H列)は今日の日付になっており、 今日の日付から未来35日?間表示させています。 やりたいこととしまして、 1.予定日を複数持ちたい  (シートに書くプログラムでどう行うか。 Vbcrlfなどで判断しても良いが、ユーザーは出来ない) 1.実際 も複数持ちたい 1つの案件に、 予定として (5/1~5/10、5/20~5/23) 実際も同様だったとします。 予定の開始、終了の設定等はありますが 項目を2つ入れることはできません…。 どのように複数日程設定するのが一番でしょうか? 良いかな…と思っているのが、 Selection_ChangeでInputBoxなどを表示させ、日付を入力させます。 入力後、メッセージボックスで「他にもありますか? Yes,NO」みたいなのを表示させて 選択させる…というのが1番かと思いました。 でも、シートプログラムでは、Inputboxできなかったような気がしますし 上手い方法が思いつきません。 このシートは他のブックにコピーして多くの人が使っていく予定です。 何か良い方法があれば、教えて下さい。 よろしくお願い致します。

  • エクセルの表である列のみ表示させたい

      共通  イ    ロ     ハ  ABC DEF GEIJK LMNOP 1 2 3 ----------------------- 仮にA~P列それ以上にデーターが入力されています 入力する時ある分類毎に入力をしたいのですが あまり横に長すぎて、そこを出すのがいつも大変です、また、人が探すときもなかなか探し切れません (1)共通ABC+イ列  (2)共通ABC+ロ列 (3)共通ABC+ハ列 のように、出したい箇所が簡単に表示させることができますでしょか。 私はマクロは全く分かりませんが、ボタン一つでそれが選択され表示されたら理想だなと思います マクロが分からない私ですが、今後必要なら勉強したいと思いますのでそちらの方面のご指導もお願いします   

  • Excelで複数の列の幅を調整

    解説書によると、 「Ctrlキーを押しながら、複数の列番号をクリックした後に、一つの列の幅を調節すると、選択した列全てが調節される」 とあるのですが、うまくできません。 複数の列を選択することは出来るのですが、一つの列を調整しても、他の列はそのままです。 どうすればよいのでしょうか?

  • エクセルVBAで複数のセルの操作

    コマンドActivecell.Valueという指定の仕方ってありますよね。でもアクティブなセルをCtrlボタンで複数にするとこのコマンドでは操作できないですよね。 たとえばアクティブセル(内容:文字列)をちりばめて、そのすべてに"氏"とつけるマクロを作りたいのですが、どうすればいいのでしょうか。 分厚いVBA辞典を買ったのですが、載っていないもので…

  • VBAマクロ作成について

      A  B  C -------------- 1 ○○ 123 456 --------------- 2 □□ 789 123 --------------- 3 △△ 456 789 -------------- 上記のような表でInputBoxを使い「○○」と入力すると同じ行のB列「123」とC列「456」 「□□」なら「789」「123」のように値を取得し、変数に代入するような マクロを作成したいのですが、どのように記述すれば良いでしょうか。 初歩的な質問ですが、宜しくお願いいたします。

  • ナンバリング印刷について

     はじめまして VBA初心者です。下記のようなマクロを見つけました。下記のマクロを実行すると開始番号、終了番号を入力すると印刷までいってしまいます。    開始番号、終了番号を入力した後、開始番号と終了番号の確認画面が出で、確認後に印刷か中止かを選択できるようにしたいと思っています。    よろしくお願いします。 Sub NumberPrint() Dim idx As Integer Dim frmPage, toPage frmPage = Application.InputBox("連番を挿入して印刷します" & Chr(13) _ & "開始番号を入力してください", Type:=1) toPage = Application.InputBox("終了番号を入力してください", Type:=1)  If frmPage > 0 And toPage >= frmPage Then For idx = frmPage To toPage Range("e1").Value = idx ActiveSheet.PrintOut Next idx Else MsgBox "開始番号、終了番号が不適切です。印刷は行いません" End If

  • VBAで、離れた複数の列に対して処理を施すには?

    VBAでマクロを組んでいたところ、問題が出てきたので質問させてください。 1.任意の列を全選択する(たとえばA列とC列という離れた列です) 2.その列の中でも、すべての行にではなく、数行にだけセル結合解除という処理を施す というマクロを組もうとしています。 しかし、全選択した列の一部の行(画像参照)にだけ処理を施す、というのができません。 1列だけ全選択→セル結合解除、というのはできるのですが、複数の列(しかも列同士が隣り合っていない)に対して処理を施すというのがうまくいかず…。 以下のようにマクロを作成してみたのですが、どこが問題になってるのでしょうか? アドバイスいただけると幸いです。 Sub test1()  Dim intX_1 As Long  Dim intX_2 As Long  Dim rg1 As Range  Dim rg2 As Range  Set rg1 = Range(CStr(ActiveWindow.RangeSelection.Address))  For Each rg2 In rg1 '選択した列のうち、2行目~最後のデータが存在する行まで処理を行う intIX_1 = 2 While rg2(intIX_1) <> "" rg2(intIX_1).MergeCells = False     intIX_1 = intIX_1 + 1 If rg2(intIX_1) = "" Then Exit For End If Wend Next End Sub

  • EXCEL VBA(初心者)印刷ループについて

    こんばんは。 EXCEL VBA初心者です。 以下のような印刷ループのVBAを作りました。 (シート1にデータを入力しシート2で印刷) Sub 連続印刷() Dim x As Integer x = Application.InputBox( _ prompt:="先頭ページの番号を入力してください") Y = Application.InputBox( _ prompt:="最終ページの番号を入力してください") line: Worksheets("1").Select Range("B1").Select For i = x To Y 'ループ開始番号と終了番号を追加 ActiveCell.FormulaR1C1 = i '変数 i を代入するように修正 ' Range("B1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Next i '次へループ End Sub というものです。 以下の問題点を改善したいのです。 (1)開始番号と終了番号のいずれかが ”空白”の場合は  VBAを中止し何も印刷しない(何もメッセージを表示しない) (2)開始番号が終了番号より数字が大きい場合も(1)と同様の処理にしたい というものです。 初心者のためご教授ください。 よろしくお願いいたします。

専門家に質問してみよう