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

このQ&Aに関連する最新のQ&A

A 回答 (3件)

Range("A:A,C:C,E:E").Select


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

ユーザーフォームを使ってみてはどうでしょうか?


次のものはユーザフォームに
テキストボックスの 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
    • good
    • 0

 Columns("A:C").Hidden = True



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

この回答への補足

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

補足日時:2001/11/22 07:33
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルのフリーズ

ノートパソコンでエクセル2003を使用しているとしょっちゅう画面がフリーズしてしまいます。
フリーズ時間は最大で5秒間程で、頻度は5秒~15秒くらいに一回とかなり頻繁です。(普通のA4サイズの書類を作るのに1時間ほど掛かります)
状態としてはフリーズ中はカーソルも止まってしまい、でもその間に入力した文字等は記憶しているらしく、フリーズが解けた瞬間一気に打ち出されるような感じです。
エクセル以外は何の問題もなく、またそのエクセルのファイルを同ネットワーク上にある他のパソコンで操作しても何の問題もないので、自分のパソコンの中のエクセル本体が壊れているかのような状態です。
どなたか助けていただけないでしょうか?
ちなみにこの現象は突然起きるようになりました。

Aベストアンサー

ソフトの不具合が原因です。再インストールをお勧めします。

QExcelVBAで非表示列を選択不可にしたい

ExcelVBAにおいて、非表示にしている列のみを選択できないようにしたいのですが、
どうすればよいのでしょうか? (Excel2007,Excel2010)

よく非表示列(セル)をコピーしないように、手動で「可視セル」指定することはできますが、
そうではなく、シートの保護や非表示設定をVBA内でプログラムするように、
シートの選択の可不可も、プログラム内で行いたいのですが。

シートの保護で行うと、全ての列(セル)が選択不可になってしまい、困ります。


具体的には、VBA以下のことをします。

1.特定列を非表示にする。(この時、選択不可にしたい)

2.1の列を表示にする。(この時、選択可能にしたい)


よろしくお願いします。 m(_ _)m

Aベストアンサー

> シートの保護で行うと、全ての列(セル)が選択不可になってしまい、困ります。

ご希望としては、『手動で「可視セル」指定』と同じ動作を
VBAで実行したい、ということでよろしいでしょうか。

上記の理解でよろしければ、以下の方法で可能です。
(なお、ワークシート全体を選択したときの「オーバーフロー」
 エラーの回避策がわからなかったので(汗)、エラー処理で
 逃げています。そのため、他の箇所で同一エラーが出た
 際に問題とならないよう、ワークシートへの直接記述では
 なく、ワークシートから呼び出す関数として作成しました)

1)当該ワークブックに標準モジュールを新規追加

2)下記コードを貼付:

Public Function SelectVisibleCells(Target As Range) As Boolean
'エラー発生時は「エラー処理」の行に飛ばす
On Error GoTo エラー処理

  Dim Rsl As Boolean, Rng As Range
  Const PrcName As String = "SelectVisibleCells"

  '戻り値の初期値
  Rsl = True
  
  '選択範囲に不可視セルが確実にない場合はそのまま終了
  If Target.Cells.Count <= 1 Then GoTo 終了処理
  
  '手動で「可視セル」を選択するのと同じ動作を実行
  Set Rng = Target.SpecialCells(xlCellTypeVisible)
  Rng.Select

終了処理:
  '戻り値を設定&メモリを明示的に解放して終了
  SelectVisibleCells = Rsl
  Set Rng = Nothing
  Exit Function

エラー処理:
  Select Case Err.Number
    Case 6  'シート選択時のCount確認による「オーバーフロー」エラーへの対処
      Resume Next
    Case Else
      MsgBox Err.Number & ":" & Err.Description, vbCritical, PrcName
  End Select
  Rsl = False
  Resume 終了処理
End Function

3)当該ワークシートの「SelectionChange」イベントで、
 以下のように呼出コードを記述:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

  SelectVisibleCells(Target)
  '他にコードを記述する場合は、例えば以下のようにします:
  'If SelectVisibleCells(Target) = False Then Exit Sub

End Sub


・・・以上です。

> シートの保護で行うと、全ての列(セル)が選択不可になってしまい、困ります。

ご希望としては、『手動で「可視セル」指定』と同じ動作を
VBAで実行したい、ということでよろしいでしょうか。

上記の理解でよろしければ、以下の方法で可能です。
(なお、ワークシート全体を選択したときの「オーバーフロー」
 エラーの回避策がわからなかったので(汗)、エラー処理で
 逃げています。そのため、他の箇所で同一エラーが出た
 際に問題とならないよう、ワークシートへの直接記述では
 なく、ワークシートか...続きを読む

Qエクセルで画像を貼り付けるとフリーズしてしまう。

エクセルに画像を貼り付けるとパソコンがフリーズしてしまいます。何故でしょうか?解決方法を教えてください。

OSは、Windows2000です。
エクセルのバージョンは、2003。

Aベストアンサー

Win2000で198MBはちとキツイかな?
エクセルのバージョンが2003というのは、Office2003を入れていると思うのですが、他にアンチウィルス系も動いているのでしょうから、256MBは欲しいですね。

最近似たような質問があって、直接貼り付けるよりも問題のjpegをファイル保存しておき、エクセルの[挿入]→[オブジェクト]で実施したらどうかという回答があったばかりです。このときはワードでしたが、エクセルでもお試しみてはどうですか。

QSheetの選択行の複数列を空白に

RowSurceでリストボックスにS5:AB21の範囲を表示させているのですが、下の式だSheetの選択行全体のセルが、空白になってしまいますので選択行の列のS:ABの範囲だけを空白にしたいのですが、教えてください。

'削除の処理
Dim 選択行 As Integer
For 選択行 = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(選択行) Then
Rows(選択行 + 5) = ""
End If

Windows7 Office2010

Aベストアンサー

こんばんは、
Range("S5:AB21").Rows(選択行 + 5) = ""

Qエクセルがフリーズ

エクセルで通常の使い方をしているのに、突然マウスポインターがフリーズします
何回もあります。何が原因でしょうか?パソコンはNECのノートです。

Aベストアンサー

¥Windows¥TempフォルダにEXCEL使用に
テンポラリファイルが作成されてれば、
これを削除すると改善されるかも?

むやみに消すとまずいこともありますのでくれぐれも慎重に。

Q帳票形式のフィールド入力の時、TABオーダーで同一列の下のフィールドに

帳票形式のフィールド入力の時、TABオーダーで同一列の下のフィールドに移動したい

使用環境:ACCESS2003

↓のように帳票形式で表示しているテーブル


商品ID    納入日    仕入NO   管理コード
13    20091205      2569
14    20100326      6824
15    20100422      2548
16    20100430      3654

バーコードリーダーで管理コードを
順次入力したいのですが

理想はバーコードリーダー入力が終われば次の管理コードフィールドに
カーソルが移動してくれるのいいのですが、

それが出来ない場合は、バーコードリーダーで値を入力した後、
TABキーやEnterを押すと
次の管理コードフィールドにカーソールが移動するように出来れば
大変嬉しいのですが、


どなたかよきアドバイスをいただけますようお願い申し上げます。

Aベストアンサー

> ↓のように帳票形式で表示しているテーブル

フォームの帳票形式を使用して、テーブルのデータを表示
されている、ということでよろしいでしょうか。

そうであれば、

> TABキーやEnterを押すと次の管理コードフィールドに
> カーソールが移動する

については、フォームの(コントロールの)設定で対応可能です。
(なお、バーコードリーダーは使用したことがないため、No.1の方と
 同様、バーコードの読み込みを拾う方法はわかりません(汗))

1)フォームをデザインビューで開く
2)適当なところをダブルクリックするなどして、プロパティシートを
 開いておく
3)EnterキーやTabキーで移動したくないコントロール(テキスト
 ボックス)を選択
4)プロパティシートの『その他』タブを選択し、『タブストップ』の
 項目を「いいえ」に設定
5)「3~4」の操作を必要なだけ繰り返したら、フォームを保存
 して閉じる

・・・以上で、最初の入力時に『管理コード』に移動しておけば、
後はEnter/Tabで次のレコードの管理コードにカーソルが移動
するようになります。
(なお、Shift+Tabの同時押しで前のレコードの管理コードに、
また、F6キーでヘッダ・フッタのコントロールに、それぞれ移動
できます(→移動可能なコントロールがある場合)。)

なお、「3~4」を繰り返し、と書きましたが、デザインビューで
何もコントロールがないところをクリック&ドラッグしたときに表示
される四角形で複数のコントロールを囲むと、囲んだコントロール
が一括で選択されます。
また、複数のコントロールを選択する別の方法として、Shiftキー
を押したまま、対象コントロールを順次クリックしていく、という
方法もあります(間違えて選択した場合は、Shiftキーを押した
まま再度クリックすれば解除が可能)。
この状態にしてやれば、「4」の操作は複数コントロールで一括
で指定できますので、参考まで。
(但し、種類の異なるコントロールを同時選択すると、必要な
 項目がプロパティシートに表示されなくなる場合があります
 ので、ご注意下さい:
 今回の例では、ラベルなど、タブ移動の対象外のコントロール
 が同時に選択されてしまうと、『その他』タブに『タブストップ』の
 項目が表示されなくなってしまいます)

※バーコード読み込み時は『管理コード』のみの移動にしたいが、
 通常の入力時は商品IDなども移動可能でないと困る、という
 場合は、マクロ/VBAを使用して設定を切り替えてやることに
 なります。
 (例えばフォーム フッタにオプショングループを設置し、その更新
  後イベントで、商品ID等の「TabStop」プロパティをTrue/False
  に切替、と)

> ↓のように帳票形式で表示しているテーブル

フォームの帳票形式を使用して、テーブルのデータを表示
されている、ということでよろしいでしょうか。

そうであれば、

> TABキーやEnterを押すと次の管理コードフィールドに
> カーソールが移動する

については、フォームの(コントロールの)設定で対応可能です。
(なお、バーコードリーダーは使用したことがないため、No.1の方と
 同様、バーコードの読み込みを拾う方法はわかりません(汗))

1)フォームをデザインビューで開く
2)適当なところをダブルクリック...続きを読む

Qエクセルのフリーズとタスクマネージャーの無反応

エクセル使用時たびたびフリーズするので困っています。(多い時は1時間で3回)
質問集で同じような症状が無いか探したのですが、見つからないので質問いたします。

エクセル使用時、リボンやシート見出し、をクリックすると画面の半分が白くなりフリーズすることがあります。
「Alt] 「Ctrl] 「Delete」 を押しても無反応なので、強制終了をします。
再立ち上げ時、セーフモードを選択しても途中で停止してしまうので、通常モードで立ち上げています。(何も無い時はセーフモードで立ち上げることができます。)

1)フリーズの原因と対処法
2)「Alt] 「Ctrl] 「Delete」を押しても反応しない原因と対処法
3)そのあとの再起動時にセーフモードが途中で停止してしまう原因と対処法
分かる方がおられましたら、お教え下さい。

OSはwindows7、office2007
エクセルのサイズは33KBから188KBです。

初めて質問しますので抜けているところがあれば追加します。
よろしくお願いします。

Aベストアンサー

そうですね。。
エクセルの再インストールは、やってみましたか?

Q1列おき2列選択

 指定範囲(I9:CW40)の中で1列おきに2列選択したいのですが 、当然ですがマクロで記録はできても実行できませんし2行1列には関数式が入っているのでこれを除いて他の範囲(I71:CW99)に同じように1列おきに2列に「形式として貼り付け」ー「値」としたいのですが、お教え願えませんでしようか?



Sheets("メイン").Select
Range( _
"J9:K40,M9:N40,P9:Q40,S9:T40,V9:W40,Y9:Z40,AB9:AC40,AE9:AF40,AH9:AI40,AK9:AL40,AN9:AO40,AQ9:AR40,AT9:AU40,AW9:AX40,AZ9:BA40,BF9:BG40,BI9:BJ40,BL9:BM40,BO9:BP40,BR9:BS40,BU9:BV40,BX9:BY40,CA9:CB40,CD9:CE40,CG9:CH40,CJ9:CK40,CM9:CN40,CP9:CQ40,CS9:CT40,CV9:CW40" _
).Select
Range("CV9").Activate
Selection.Copy
End Sub

 指定範囲(I9:CW40)の中で1列おきに2列選択したいのですが 、当然ですがマクロで記録はできても実行できませんし2行1列には関数式が入っているのでこれを除いて他の範囲(I71:CW99)に同じように1列おきに2列に「形式として貼り付け」ー「値」としたいのですが、お教え願えませんでしようか?



Sheets("メイン").Select
Range( _
"J9:K40,M9:N40,P9:Q40,S9:T40,V9:W40,Y9:Z40,AB9:AC40,AE9:AF40,AH9:AI40,AK9:AL40,AN9:AO40,AQ9:AR40,AT9:AU40,AW9:AX40,AZ9:BA40,BF9:BG40,BI9:BJ40,BL9:BM40,BO9:BP40,BR9:BS40...続きを読む

Aベストアンサー

1列おきに2列に「形式として貼り付け」ー「値」としたいのですが
マクロの記録にばかり頼っていると、どうしてもコピーと貼り付けをイメージしてしまいますが
簡単な式で、値をほかのセルへ入れることが出来ます。

例えば
Sheets("コピー先").Range("J9:K40").Value=Sheets("メイン").Range("J9:K40").Value

とかでできます。

今回の質問の場合、列(JとかK)を順に変えたいので Cellsプロパティを使って
Sheets("コピー先").Range(Sheets("コピー先").Cells(9, 10), Sheets("コピー先").Cells(40, 11)).Value =・・・
と記述することになります。

Sub Macro1()
Dim j As Integer
Dim k As Integer
j = 10
k = 10
For i = 1 To 3
Sheets("コピー先").Range(Sheets("コピー先").Cells(9, k), Sheets("コピー先").Cells(40, k + 1)).Value = _
Sheets("コピー元").Range(Sheets("コピー元").Cells(9, j), Sheets("コピー元").Cells(40, j + 1)).Value
j = j + 3
k = k + 2
Next
End Sub

j = 10
k = 10
For i = 1 To 3
・・・
はそちらの都合に合わせて変更してください。
http://excelvba.pc-users.net/index.html
などのサイトを参考にして勉強してみてください。

1列おきに2列に「形式として貼り付け」ー「値」としたいのですが
マクロの記録にばかり頼っていると、どうしてもコピーと貼り付けをイメージしてしまいますが
簡単な式で、値をほかのセルへ入れることが出来ます。

例えば
Sheets("コピー先").Range("J9:K40").Value=Sheets("メイン").Range("J9:K40").Value

とかでできます。

今回の質問の場合、列(JとかK)を順に変えたいので Cellsプロパティを使って
Sheets("コピー先").Range(Sheets("コピー先").Cells(9, 10), Sheets("コピー先").Cells(40, 1...続きを読む

Qエクセルのカメラの使用時のフリーズ

こんばんは。以前、エクセル2000の不具合という内容でノートPCの欄に質問させていただきましたものですが、明確な原因がわかりましたので再度質問させていただきます。
これは会社のノートパソコン(WIN2K)でエクセル使用時にツールバーにある「カメラ」機能を使うとにフリーズしたり、数字等を入力してエンターキーを押すと12~30秒くらい時間が固まってしまう状況に陥ってしまうため困っています。
カメラで指定範囲を選択して、別の場所に貼り付けるのであくまで画像データとして取り扱われる関係でデータ量が多くなってしまうとは考えられますが、100KBほどのデータでもフリーズ状況に陥ってしまいます。
ちなみに、フリーズ状態の時のCPU使用率はずっと100%となっています。メモリーは256MBで余裕のある環境にあります。このカメラで貼り付けたデータを削除するとスムースに動く様になります。またカメラで貼り付けたエクセルファイルを開いたまま、別のカメラを使用していないエクセルファイルを使用しても、影響が及んでしまいます。
しかし、同じカメラ機能を使ったエクセルファイルを別のパソコンで開くと多少時間はかかりますが、5秒もかからないくらいで動きます。何かカメラの設定などが悪いのでしょうか?エクセルの再インストールと*.xlbファイルの削除は実行しました。長々となってしまいましたが、よろしくお願いします。

こんばんは。以前、エクセル2000の不具合という内容でノートPCの欄に質問させていただきましたものですが、明確な原因がわかりましたので再度質問させていただきます。
これは会社のノートパソコン(WIN2K)でエクセル使用時にツールバーにある「カメラ」機能を使うとにフリーズしたり、数字等を入力してエンターキーを押すと12~30秒くらい時間が固まってしまう状況に陥ってしまうため困っています。
カメラで指定範囲を選択して、別の場所に貼り付けるのであくまで画像データとして取り扱われる関係でデータ量...続きを読む

Aベストアンサー

私は、[カメラ]機能を比較的多用するので、どんな回答が付くか静観していましたが…

「メモリーは256MB」が「余裕のある環境」かどうかは分かりませんが、仰っているような現象を経験したことがありません(昔に Win2000、Excel2000 を使っていたことがありましたが、メモリサイズがどうだったかは忘れました)。
ところで、「100KBほどのデータでもフリーズ状況に陥ってしまいます」とのことですが、この「100KBほどのデータ」というのはどうやって分かったのですか?

QA列にB列の空白セル以外のセルの数だけ1から番号をふりたい。

A列にB列の空白セル以外のセルの数だけ1から番号をふりたい。

WIN7 Excel2007でマクロ作成中です。A列にB列の番号の入っているセル(空白セル以外の)の数だけ番号を入力したいのですが、下記コードで、うまく出来ません。どうしたらよろしいでしょうか。

Sub 行番号を入れる2()
Dim i As Integer
Dim fCnt As Long

'シートが保護されていたら保護を解除
If ActiveSheet.ProtectContents = True Then
ActiveSheet.Unprotect
End If
fCnt = WorksheetFunction.CountA(Sheets("一覧").Columns(2)) 'COUNTA関数でB列の入力セル数を求める。
For i = 1 To fCnt
Worksheets("一覧").Cells(i + 3, 1).Value = i
Next i
End Sub

Aベストアンサー

見出し:1行目
データ:2行目~~

'-------------------------------------
Sub test()
 Dim R As Long
 Dim No As Long

 ActiveSheet.Unprotect

 For R = 2 To Cells(Rows.Count, "B").End(xlUp).Row
   If Cells(R, "B").Value <> "" Then
     No = No + 1
     Cells(R, "A").Value = No
   End If
 Next R

 ActiveSheet.Protect
End Sub
'---------------------------------------------

Protectの引数は省略。
以上です。
 


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報