エクセル VBAでこれは難しいですか?

このQ&Aのポイント
  • エクセル VBAで表の特定の列を削除して、ファイルを新しく保存する方法について教えてください。
  • VBAの初心者ですが、行と列を指定して特定の列を削除し、その部分を左詰めにして新しいファイルで保存することは可能でしょうか?
  • エクセルで特定の列を削除し、左詰めにする処理をVBAで自動化したいのですが、初心者の私でもできるのでしょうか?
回答を見る
  • ベストアンサー

エクセル VBAでこれは難しいですか?

列 A B C D 行 1 T1 あ 1 2 2 T2 い 4 5 3 T3 う 7 5 分かりにくいかもしれませんが、上記のような表があるとします。ファイル名:AA.xlsとします。 ”行1”の「T1」や「あ」等はファイルにより違うとします。 1つのファイルの1シートにこういった表が改ページにより(ある領域で1,2ページとしている)たくさんあります。 これを必要な行、列をVBAで作成されたボックス?に入力方式で行、列を入力して、入力された例えば"B"列が削除され、その部分は左詰にされ、そのファイルが新しく別のファイル名で例えばAB.xlsが自動的に作成することは可能でしょうか? 手順としては 1 ファイルにより必要、不要な列・行が違うのであらかじめ削除する列・行を確認する。(このファイルをA1.xlsとする) 2 実行したいファイルを参照で(任意のフォルダに進めるよう)読み込めるようにしたVBAを開き、A1.xlsを選択する。 3 削除したい列・行を入力できる窓があり、そこに打ち込む。 4 削除した列・行のスペース分左詰め、上詰めにされたA2.xlsというファイルが同一フォルダ内に作成される。 VBAは全くの初心者で、インターネットで勉強を始めようとしている青二才です。 最終的にはこれ以上のことをしたいですが、まずは最低限これをしたいです。 余談ですが、これができるようになるためにはやはり一から勉強をするしかないのでしょうか? 今したいことがずばり載っている入門書のそのページだけ勉強しても不可能でしょうか? ・PS3のあるゲームのキャラクターの必殺技のコマンドを覚えても、まずPS3をどうやって起動するのか? という考えと一緒でしょうか?

noname#127360
noname#127360

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

  • ベストアンサー
  • kazne
  • ベストアンサー率66% (8/12)
回答No.3

まず、質問に対してですが、比較的容易に実現できます。 やろうとしてる事は、ファイルダイアログでファイルを選択して開き、 フォームを表示し、指定した行・列を削除した後、別名で保存です。 サンプルコードを書いときます。 準備するもの (1)UserForm1という名前のフォームを追加 (2)UserForm1内にTextBoxを二つ、CommandButtonを一つ、Labelを一つ追加。 (3)CommandButtonのクリックイベント内に下記コード追記 *************** If IsNumeric(Me.TextBox1.Value) Then DeleteRow = CLng(Me.TextBox1.Value) End If If IsNumeric(Me.TextBox2.Value) Then DeleteCol = CLng(Me.TextBox2.Value) End If Unload Me *************** (4)標準モジュールの追加 (5)標準モジュール内に下記コード追記 *************** Option Explicit Public DeleteRow As Long '削除行位置 Public DeleteCol As Long '削除列位置 Sub ColDelete() Dim MyBook As Workbook Dim MySheet As Worksheet Dim SavePath As String Dim SaveName As String With Application.FileDialog(msoFileDialogFilePicker) .Filters.Add "エクセルブック", "*.xls" .Title = "エクセルファイルを開く" .Show If .SelectedItems.Count = 1 Then Set MyBook = Application.Workbooks.Open(.SelectedItems(1)) Else Exit Sub End If End With For Each MySheet In MyBook.Worksheets DeleteRow = 0 DeleteCol = 0 MySheet.Activate Load UserForm1 UserForm1.Label1.Caption = "シート名:" & MySheet.Name UserForm1.Caption = "削除行・列を指定" UserForm1.Show If DeleteRow <> 0 Then '削除行の指定があれば MySheet.Rows(DeleteRow).Delete End If If DeleteCol <> 0 Then '削除列の指定があれば MySheet.Columns(DeleteCol).Delete End If Next SavePath = MyBook.Path & "\" '選択したファイルの絶対パスを取得 SaveName = MyBook.Name 'ファイル名を取得 SaveName = Mid(SaveName, 1, InStrRev(SaveName, ".") - 1) 'ファイル名から拡張子を抜いた名前を取得 MyBook.SaveAs SavePath & SaveName & Format(Now, "hhmmss") & ".xls" MyBook.Close False End Sub ************ 以上です。 それとこれから習得するとの事ですが、 ネットだけだと意図する答えを探す手間が発生する事を考慮して下さい。 そして必ず意図する答えを得られる保障はない事も忘れてはいけません。 なので、初心者向けの入門書を購入し とりあえず何かを作ってみるってのが 一番の近道かと思います。 あと、マクロ自動記録機能の活用、 入手できるなら、他人が作ったツールなどのコードを見る事です。 ExcelVBAとAccessVBAは若干の相違点があるなど、奥が深い世界なので、 地道にがんばってください。

その他の回答 (2)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

>要な行、列をVBAで作成されたボックス?に入力方式で行、列を入力して の部分が良くわからないのですが。 基本の部分を一から勉強されることをお勧めします。例えば http://excelvba.pc-users.net/index.html のサイトなどを一通り目を通してみてください。そんなに日数はかからないと思います。 >実行したいファイルを参照で(任意のフォルダに進めるよう)読み込めるようにしたVBAを開き、A1.xlsを選択する。 は Sub ボタン1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If End Sub このことではないかなと察します。試してみてください。 一応のことが理解できれば、質問の仕方も変わってきます。 他の人にわかりやすい質問の仕方が出来るようになります。

回答No.1

出来ますよ。 EXCELであればマクロレコーダを起動しておいて上記の操作を行えばマクロに記録されます。このマクロを参考にすればかなり楽になります。 0から作るのは困難でもある程度のものがあればできると思います。 入力についても専用の画面(VBAのFORM)を使わないで、別途シートを作成して入力させればこれもマクロ記録されます。

関連するQ&A

  • Excel VBAのカウントについて

    Excel2003で表を作成しています。 画像のような表を作成しているのですが、 左のデータから右の表に数を入力するのに、VBAで出来ないでしょうか? COUNTIFを使おうと思ったのですが、COUNTの条件が3つありますし、 左のABCの列は500行くらいデータが入っているので出来ればVBAで出来たらと思いました。

  • EXCEL VBAで教えてください。

    EXCELで、4列(A~D)仕立ての表があります。D列に入力されている日付が現在より過去の場合、その行を削除するように作成したいのですが、教えていただけますでしょうか?

  • エクセル VBA

    最終行から順番に下へ同列で入力するVBAを教えて下さい。 EXCELのVBAで教えて下さい。 シート1のA列にはB列が入力されると自動入力されるNo.があり、C~G列もB列が入力されると自動入力されます。 B列には日付が、H列には3~4桁の数字が入力したいのですが、 入力行は必ず最下行のセルB、Gな為、VBAでフォームを作成し、 入力実行ボタンを押すことにより、最下行のセルB、Gに反映されるように したいです。 又、上記入力後に、シート2のH~N列をコピーして、シート3のA~G列に値のみの貼り付けを行い保存した後、シート3のA~G列をコピーして csvファイルを作成して保存したいです。 一連の流れを、フォームの入力実行ボタンを押すことで実行したいのですができるのでしょうか? 宜しく御願い致します。

  • エクセルVBAのプログラム

    A.xlsからB.xlsのファイル(最初はA..xlsのみが開いています)へのデータ転送をしたいのですが、プログラムが組めません(>n<)  すみませんが誰か助けてください。 行いたい作業は以下の通りです。 ※デスクトップにあるB.xlsを開く ※A.xlsのセル「A1~A5」をコピーしてB.xlsのAの列の列で空欄の行を見つけて、列と行を入れ替えて貼り付ける(もしB.xlsのA10までデータが入力されていたら、貼り付ける場所はA11~F11になります) ※B.xlsは作業終了後自動保存して閉じる その際に ※A.xlsのセル「A1」にはデータ名が記入されているのでB.xlsのAの列にその名前があれば、そこに上書きする形にしたい。 ※A.xlsのA2のセルには「55,23」のように二つの数字が「,」でつながって入力されているので、B.xlsに貼り付けるときには、二つのセルにわけてそれぞれの数字を貼り付けたい。 お手数おかけしますがよろしくお願いいたします。

  • エクセルVBAについて (データのマッチング)

    過去ログで解決できなかったのでここに書かせていただきます。 エクセルのVBで下記のプログラムを作成したいのですがうまくマクロが組めません。 ファイル名:TEST01.xls ファイル名:TEST02.xls があります。 TEST01.xlsにあるA列のデータとTEST02.xlsのA列にあるデータが一致したおり、かつTEST02.xlsのD列のデータが『×』の場合のみ、TEST01.xlsのB列に固定の文字(test)を入力し、TEST01.xlsのC列に入力されているデータを削除するプログラムを作りたいです。 ご存知の方がいらっしゃれば、ご教授よろしくお願い致します。

  • エクセルVBAについて教えてください

    エクセルVBAを勉強中のものです。 仕事でVBAが必要になり勉強しながら作成をしています。 作成したいのはシフト表になるのですが、1年分をまとめて作成するため、最初に一旦空白セルに、ある一定の規則性を持った文字を入力したいのです。 その規則というのが ・入力する文字はA、B、C、Dの4種のうちどれかである ・同じ文字が入力されたセルが5つ続いたのちは、次の文字に移る(A、A、A、A、A、B、B、B、B…というように) ・夏季休業等、×の付いた部分は入力しない というものです。 なおかつ、前年度のデータからの引き継ぎで作成するため、スタートがバラバラです。(添付の画像通り) 休暇の列は5連勤した後1休、という規則です。 VBAと関数を併用するのでも構いません。 関数のみでできるのなら、それでも構いません。 初心者の私にぜひ教えていただけないでしょうか…。 よろしくお願いします。

  • VBA 一つのシートにまとめる

    下記の条件でVBAではどうすればいいのか、教えて頂けませんでしょうか・ TEST1.xls TEST2.xls TEST3.xls ・上記には、それぞれDATA1シートとDATA2シートがあります。 ・このうち、3つのブックのDATA1シートのB列からT列の2行目から最終行までを、matome.xlsのmatomeシートの最終行から追加していきたいのです。 仮に、matome.xlsのmatomeシートの最終行(データがある行)が50行目だった場合、 TEST1.xlsのB列からT列の2行目から最終行を51行目に貼り付け、それが75行目までだったとすると、TEST2.xlsのB列からT列の2行目から最終行のデータは76行目からといった感じです。 わかりづらくて申し訳ありませんが、よろしくお願い致します。

  • エクセルの行削除VBA

    次の条件を満たすエクセルVBAの記述を教えてください。 A列に「ページTOP」の文字がある行から文末までの行を削除 A列に「PROGRAM…」のある行と次の1行を残して「4:00~…」を含む行までを削除 (例 A10 PROGRAM… A11 AB A12 hij A13 tuy A14 4:00… ※A12~A14を削除 A1からA列に「PROGRAM…」のある行まで行削除 Excel2010/WindowsXP

  • エクセルマクロ 次のようなプログラム教えてください

    エクセルのマクロで、次のようなことをしたいと思っていますが、 素人でわかりません。 教えていただけますか。 ---------------------------------- o動かしているファイルをa.xlsとします。  a.xlsは、3行目からA列に名前、B列~D列にデータが入っていて、  各行ごとのファイルを作りたい。(行数は決まっていない)  なお、セルE1にある文字が入っている。 o各ファイルは、原紙としてgensi.xlsとして保存されているファイルに、  a.xlsのB~D列のものを入力したものを作りたい。  (B~D列のデータは、gensi.xlsのそれぞれセルC7・C8・C9に入力する)   gensi.xlsは、a.xlsと同じフォルダにあります。 o作成場所は、「C:\date」の中に、セルE1にある文字のフォルダ、A列に  ある名前のフォルダに作りたい。 (セルE1の文字のフォルダは、マクロを初めて実施するときは無いと思います  が、2回目からは存在すると思います。A列の名前のフォルダはマクロ実施時  にはありません。作成するファイル名は、A列の名前と同じ(フォルダ名と同じ).xls にします。) o実行ボタンを3つ作って、1つは今選択されている行のフォルダ・ファイルを作る。  2つ目は数字を入力させて、今選択されている行から入力した数字の行までを一括  で作成する。  3つ目は、3行目から現在入力されている行すべてを一括で作成する。 ------------------------------- 上記のことをしたいと思っています。 よろしくお願いします。 駄文ですみません。 なお、エクセルは古いバージョンでエクセル2000です。

  • VBAのコードについての質問

    いつもお世話になっております。 以下の操作(添付ファイル)に対するVBAのコードを教えてください。 (1)シート1(添付ファイル左):B列に新聞名、C列に対象記事数 (2)マクロを実行することにより、シート2(添付ファイル左)の表が作成される。 質問したい事は、A新聞の記事数が3、B新聞の記事数が2なので、シート2にA新聞の行が3行作成され、その下に、B新聞の行が2行・・・・記事数が0の場合は行は作成されない。 のような事をやいりたいのですが、コードが分かりません。 どなたかよろしくご教授ください。

専門家に質問してみよう