Excelで表に任意データを入れたい

このQ&Aのポイント
  • Excelで表に任意のデータを入力する方法について教えてください。
  • シートAに30行分の名前データを綺麗に収める表を作成し、別のシートBから任意の名前データを選択してシートAの形式で印刷する方法について教えてください。
  • マクロを使用せずに、Excelで選択したデータ件数に応じてシートAの表を複数枚に渡って印刷する方法について教えてください。
回答を見る
  • ベストアンサー

Excelで表に任意データを入れたい

いつもお世話になっています Excelで悩んでいるところがあるので、ご教授をお願いします。 ExcelにシートA,シートBを用意 シートAに表を作成しまして (例) | 名前  | 備考  | | ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄| この表は1ページで30行分の名前データが綺麗に収まる表です。 別シートBに百数件の名前だけのデータが入っています。 (A列に数十件、B列に数十件とデータは複数列にわたって入っています) ※今はこのデータの形式ですが、データの持ち方はある程度妥協できます シートBの任意の名前データだけ複数選択し、シートAの形を使って印刷をしたいと考えています。 この時、選択したデータ件数によってはシートAの表は複数枚に渡って印刷される必要があります。 これを実現したいのですが、どのようにすればよいでしょうか? マクロでやるのか、はたまたマクロを使わずともできるのか・・・ 差し込み印刷のような感じでできないかと調べてはいるのですが、解決できそうな情報がみつかりません。 これを実現できる方法を分かる方がいましたら、お願いします。 マクロでという場合は、VBAの記述は初心者ですのでポイントだけでも詳しく教えて頂けると嬉しいです。 よろしくお願いします。

  • tasoh
  • お礼率87% (65/74)

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

  • ベストアンサー
  • mar00
  • ベストアンサー率36% (158/430)
回答No.5

マクロを使ったやり方になりますが Altキー+f11キー → VBE画面が出てきますので 挿入 → ユーザーフォームと進んでください。 図のようにリストボックスとコマンドボタンを配置してください。 ユーザーフォームの作成が終わったらユーザーフォーム上で右クリック → コードの表示と進んで下記コードを貼り付けて下さい。 Private Sub UserForm_Initialize() Set WS01 = Worksheets("B") RETU = WS01.Cells(1, Columns.Count).End(xlToLeft).Column For n = 1 To RETU GYOU = WS01.Cells(Rows.Count, n).End(xlUp).Row For i = 1 To GYOU Mylist = WS01.Cells(i, n) With ListBox1 .AddItem Mylist .MultiSelect = fmMultiSelectMulti .ListStyle = fmListStyleOption End With Next i Next n End Sub Private Sub CommandButton1_Click() Cancel = True Set WS02 = Worksheets("A") For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) Then GYOU = WS02.Cells(Rows.Count, 1).End(xlUp).Row + 1 WS02.Cells(GYOU, 1).Value = ListBox1.List(i) End If If GYOU = 30 Then ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Range("A2:A30").ClearContents End If Next i If Range("A2") <> "" Then ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Range("A2:A30").ClearContents End If Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End Sub Private Sub CommandButton3_Click() For i = 0 To ListBox1.ListCount - 1 ListBox1.Selected(i) = True Next i End Sub 最後に左上にあるThisWorkbookをダブルクリックして そこに下記コードを貼り付けて下さい。 Private Sub Workbook_BeforePrint(Cancel As Boolean) Set WS01 = Worksheets("A") WS01.Select Range("A2:A30").ClearContents If WS01.Range("A2") = "" Then Cancel = True UserForm1.Show End If End Sub 印刷を選択するとマクロが動くようになっています。 シートBは1行目から入力しているものとしています。 Worksheets("A")、Worksheets("B")ところは適宜変更して下さい。 30行目までいくか、すべて写し終わると印刷するようになっていますのでテスト段階ではプリンターの電源を切っておくなどして下さい。 個別に選択する場合リストにチェックを入れて下さい。ボタンの全て選択を押すとリスト全てを印刷します。

tasoh
質問者

お礼

回答ありがとうございます。 ソースコードまで載せて頂いてありがとうございます。 試してみました。 ですが、データ量が多く選択が大変でした。。。 やはりVBAをいじるしかないと覚悟し、参考にしながらも セルを選択してそれだけ印刷といった形のものを組んでみました↓ ----------- Sub PrintStart() Dim countItem As Integer Dim countLoop As Integer Dim r As Range Set r = Selection countItem = r.count '枚数を算出 If countItem < 1 Then countLoop = 0 ElseIf (countItem Mod 30) = 0 Then countLoop = countItem / 30 Else countLoop = countItem / 30 + 1 End If 'データの挿入と印刷 If countLoop > 0 Then Dim ans As Long ans = MsgBox(countLoop & "枚印刷します。" & newLine & "宜しいですか?", vbOKCancel, "確認") If ans = vbCancel Then GoTo ref End If Dim countRow As Integer countRow = 0 '選択物を一個ずつ挿入しながら印刷 For Each rItem In r Dim tmpR As Range Set tmpR = ThisWorkbook.Worksheets("シートA").Range("A" & (countRow + 3)) countRow = (countRow + 1) tmpR.Value = rItem.Text If ((countRow Mod 30) = 0) Then Dim s As Worksheet Set s = ThisWorkbook.Worksheets("シートA") 'テスト用にプレビュー s.PrintPreview ' s.PrintOut '初期化 For i = 0 To 30 ThisWorkbook.Worksheets("シートA").Range("A" & (i + 3)).Value = "" Next i countRow = 0 End If Next MsgBox ("印刷しました") Else MsgBox ("選択してください") End If ref: End Sub ----------- 印刷処理のあたりは、細かい部分を少し改良する必要がありそうですが、このような形でさっと選択してさっと印刷できるようになりました。 mar00さんのコードを見ていて、まだ理解しきれないところがあるので これを機会にVBAをきちんと勉強しようと思います。 何だか自己完結のような結果になってしまい申し訳ありません; 皆さんの回答で色々な可能性が見えてきてとても勉強になりました。 ありがとうございました。

その他の回答 (4)

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

エクセルに慣れていないのだろうが、質問の意図を十分表現できてない。 (1)シートAは罫線枠だけの(データ的には白紙の)シートのことを 言っているのか。30行分の罫線だけの表だよね。はっきり書くこと。 (2)シートBのA,B列には名前が入力済みということだね。 ーー (2)の選択をどうするかが構想できてない。 VBAならクリックしたセルの値をシートAの、順順に下の行へ加えていける。 しかし質問の書きぶりから、VBAなどやったこともないのでは。 (3)シートAは30行と決めているが、これが30行を超えると関数などでは 難しくなる。 こういう30行の罫線表を作る発想がおかしいので、30行を超えても そのままデータは下行に順にセットし、印刷する際に、改ページ線を手動で 入れたら仕舞いでは。 またタイトル行の指定で2ページ目以後もタイトルを出せる。 ーー もうひとつ難しいのは、シートBで名前を2列に入力すること。 出来れば1列の方がしやすい。 1列ならVBAを使わない場合、シートAに持ってゆくものをB列に1でも入力して、B列が1の行をシートAへ 、抜き出しすることが出来る。 しかしエクセルの関数で抜き出し問題は、式が長くなり、難しい関数の 組み合わせになる。回答例は,Googleででも「imogasi方式」で照会すれば、 私以外の回答でわかる。 「imogasi方式」は作業列を使うがまだやさしさの点でやさしいと思う。 ーーー 操作の方法で シートBのA列に 山田 今川 大道 木村 曽根 大村 米沢 佐藤 とあったとして 今川 木村 大村 米沢 をCTRLキーを押しながらクリックで選択し、コピーする シートAのA2に編集ー「形式を選択して貼り付け」 「空白セルを無視する」 で貼り付け でできるのではないか。

tasoh
質問者

お礼

回答ありがとうございます。 申し訳ありません、質問に慎重になり過ぎて回答しにくい質問文になってしまいました; 1)そうです、シートAには罫線だけで作った形だけの表があります。 2)VBAの経験ですが、プログラミング自体には何の抵抗も無いのですが、VBA自体はちょっとフォーム作ってボタンクリックしてメッセージ出したくらいの経験しかありませんでしたので、VBAでどう書くのかというのが理解しきれておらず、消極的な書き方をしてしまいました・・・申し訳ありません。 3)タイトル行の指定、初めて知りました(汗) 今まで、毎ページタイトル行を作っていたのでビックリしました。 ただ、選択するデータ数が一定では無いのと、最後のページが1行のデータしかなくとも30行分の枠線は表示させておきたいので、タイトル行の指定では今回のはちょっと違うかなと感じました。 質問方法が曖昧で申し訳ありませんでした。 色々指摘してくださり、複数の可能性を提示してくださったのでたくさん勉強になりました。 ありがとうございます。

回答No.3

シートBの名前がA列やB列などの複数列に渡って入力されている理由がよくわかりませんが、それが一番ネックになってくるポイントになっています。 これが、すべてA列に入っていて尚且つその名前に重複が無ければマクロを使用することなく入力規則や関数での対応が可能と思われます。(この場合入力規則でシートAの名前欄をひとつづつ選択するもしくは、シートBに選択用フラグを立て、それを参照しながら名前欄に選択フラグの立っている名前のみ表示するという関数を入れるなどの工夫が必要ですが)

tasoh
質問者

お礼

回答ありがとうございます。 データはとにかく選択出来れば良いといった感じに詰め込んでいましたので、複数列に渡ってしまいました。。 重複は無いのですが、データ量がとにかく多く、選択はクリックかドラッグだけで簡単にでき、PC操作が苦手な人でも手間の無い簡単な手順で印刷できる方法が良いと考えていました。 選択するのにも複数選択があったり10件程度しか選択しない場合や50件ほど選択する場合などもあるので、どうしたものかと。。。 入力規則、使ったことありませんでした>< 少し触ってみましたが、こんな機能がExcelにあったんですね! 今回のには入力規則はどう対応させればよいのかわからないので違う方法を考えましたが、次何か必要になった時には入力規則が使えそうなところが色々ありますので、参考になりました。 ありがとうございます。

noname#152318
noname#152318
回答No.2

No.1です。 印刷範囲の設定の注意 各シートには、1~30番までNo.欄を既成で設けておいても良いし、 VLOOKUP関数で、表示しても良いのですが、 A列にはVLOOKUP関数用に通し番号を付けておき、【全体名簿】で オートフィルタなどで選択した番号の検索値ようにして、 印刷範囲からは、除外します。 若干の錯誤が有るかとも、思いますが、試行の参考にしてください。 一旦【全体名簿】を作れば、 【1枚目】~【○枚目】までのシートに手を加えて、様々なシートに素早くまとめることが 出来ました。  マクロにはかないませんが、それなりに5~15分くらいで、必要な項目を載せた名簿を 作ることでは、出来ました。  OKWebでExcelファイルを交換する術が有れば、サンプルをお送りします。

tasoh
質問者

お礼

2度の回答ありがとうございます。 私もNo1での内容を参考にして作ってみましたが、データ量が増えれば増えるほど手間も半端なくなるというのが難点でした・・・ 一回の印刷に5分となると、今回のは一日に何個もいろんなデータの選択方法で一覧を印刷する可能性があるので、コピペや打ち込みに比べれば早いですがやはり手間を省いたような感じにはできませんでした・・・ もう少し小規模の内容で作る時は、これを参考にさせて頂きたいと思います。 ありがとうございました!

noname#152318
noname#152318
回答No.1

(o^-’)bm 発想を変えて見ました。 まずデーターはA~Gの7列と仮定します。       A     B    C   D     E    F      G 【 シートA 】通しNo.、TMPNo.、名前、生年月日、住所、電話番号、備考を、30行(人)分 【全体名簿】通しNo.、TMPNo.、名前、生年月日、住所、電話番号、備考を、数100行(人)分 (1)まず、【シートB】を【全体名簿】とシート名を変えます。 (2)次に【 シートA 】の、(通しNo.)に合わせてVLOOKUP関数で【全体名簿】を【 シートA 】の各行に反映させるのです。   C添付画像の入力は、備考的に記述したので、実際にはセルにお合わせて打ち込んでください。) (3)次に、【 シートA 】全体に最初にVLOOKUP関数で反映させた行を全ての行にコピーします。     これで【全体名簿】で選択した行が【 シートA 】に反映させるように、調整=手直しをします。 (4)次に、【 シートA 】を(全体の行数)÷30行分だけシートをコピーで作り、【1枚目】~【○枚目】とシート名を変えます。    (シート数が10シートくらいになります。 (5)【1枚目】=1行目から30行目、【2枚目】31行から60行め、【3枚目】61行から90行目、…   とシートの行をそれぞれ残して他は削除します。 (6)【1枚目】=1行目から30行目、【2枚目】31行から60行め、【3枚目】61行から90行目、…    各シートのA列に通し番号を30個ずつ入れます。 (7)【1枚目】シート名をクリックして{Shifut}キーを押しながら【(最後)枚目】をクリックして   【全体名簿】以外の全てのシートを選択して、同じ形式に各シートをアレンジします。    一列目には共通の項目{通しNo.、TMPNo.、名前、生年月日、住所、電話番号、備考}を入れます。 (8)A列の全体の通し番号を除いた、30番ずつのTMPNo.から備考、各シートの31行までを   印刷範囲設定します。  これでtasoh様の最初の【シートA】は、【1枚目】~【○枚目】までのシートに分解されて どこのシートでも、確認でき、印刷できます。 新たな人材は、【全体名簿】に加えれば良いのです。

tasoh
質問者

お礼

回答ありがとうございます。 早速試してみましたが、想像しているよりも毎回の手間がかかりそうなので、今やろうとしていることで使用するのは難しいなと感じました・・・ あと書くのを忘れてしまっていましたが、実はとびとびでデータを選択する可能性もあり、使用する人は選択後ボタン一発(か二発)程度で印刷まで行ける手順にしたかったのです・・・(申し訳ありません。。) ですがこのやり方、他でも色々と使えそうなので参考にさせて頂きます! ありがとうございました。

関連するQ&A

  • エクセルの数件のデータを表に印刷したい

    シート1の一行分のデータをシート2の表に表示されるように設定しています。 (=でシート1のセルを指定するとゆう超単純な物です) そのデータとゆうのは、何件もあるのですが、 今は、一件づつインプットして印刷、を繰り返して処理してます。 それを何件ものデータを一気に表に反映させて印刷する事は出来ますか? あと、その表とゆうのは、A5サイズですが、印刷用紙はA4なので、 出来れば、A4用紙に二件分、印刷したいのですが・・ 恐らく、マクロとかVBAなどといった物を駆使すれば出来るのでしょうが、 過去の質問等、かなり閲覧したものの、無知な私には何を書いてるのかさえも、 ほとんど分かりませんでした。。 別シート間のセルを=で指定出来る事も、今回初めて知ったぐらいです。 エクセルの知識は表計算など、超基本的な事しか分かりません。 何がアドバイスあれば、ご教授下さい。宜しくお願いします。

  • ディレクトリ内にある複数のエクセルファイルデータを抽出したいです。

    ディレクトリ内にある複数のエクセルファイルデータを抽出したいです。 ディレクトリ内にある複数のエクセルファイルがあります。 各ファイルのSheet1の列Aと列Bと列Cと列Gと列Hのデータをインポートして1つのエクセルファイルにエクスポートしたいと考えています。 こういうことをマクロで実現することはできますでしょうか。

  • エクセル集計

    エクセルで質問です。 sheet1   列   A           B 行          (名称)       (判定) 1   あいうえお        A 2   あいうえお        C 3   かきくけこ        C  4   かきくけこ        B 5   かきくけこ        B という元データがあり、みてのとおり同じ名前のものが複数あり各々で判定が違います。 次に、別のシートには(※同じシートで列をAAとしてもよいが) sheet2   列  A       B    C    D 行                判定 1             A    B    C 2   あいうえお    1         1 3   かきくけこ         2    1 という具合に、A列には名前が複数あってもひとつとしその右側に判定の種別ごとに数を記入する。 という集計表を作成したいのですが、どなたか教えてください。 ちなみにマクロはできませんのであしからず・・・・

  • EXCELで一覧表のデータを個別に印刷したい

    こんにちわ。 質問させて頂きます。 EXCEL(エクセル)で一覧表になっているデータがありまして、それを1件1件『A4用紙1枚づつ』に印刷したい。 という発案で、色々調べたのですが上手くいかず・・・。 WORDからの差込印刷も試してみましたが、レイアウトや罫線などの設定も細かく出来ないので駄目でした。 ちなみに、一覧表のデータというのは顧客データでして、名前や住所・生年月日等が入っています。 一番理想的なのは、『EXCEL一覧表のデータ』を『別のシートに作成したテンプレート』にデータを飛ばし、テンプレートに一覧表のデータが反映される。 顧客データは数十人分のデータがありますので、印刷する際にはどのデータを印刷するかしないかを選択できる。 ・・・以上が出来れば素晴らしいです。 どなたか、その方法・もしくはヒント的な事を知っている方が居ましたら教えていただけると有難いです。 宜しくお願い致します。

  • Excel VBA ある範囲内で検索条件に一致したデータを入力する

    Excel VBA ある範囲内で検索条件に一致したデータを入力する Excel2003を使用しています。 Sheet2で選択している範囲内のB列のデータがSheet1で選択している範囲内のB列のデータと一致していたら、そのA列のデータをSheet2のA列に入力するというマクロを作成中ですが、うまくいきません…。 Sheet1とSheet2の選択範囲については、このマクロを実行前に都度選択するようにし、A列のデータは日付、B列のデータは数値です。 以前、示していただいたサンプルを参考にコードを書き換えて試していますが、なかなか思うようにいかず、質問させていただきました。 よろしくお願いします。

  • エクセルの表引き

    こんにちは いつもお世話になっています。 Sheet1に以下の表があります。 すみません、表示がうまくいかず、A列には文字列、B列には数字が入ります。 A列に数字があるように表示されていましたらB列に表示されているものとしてみてください。 Sheet1 A        B 和歌山    2 愛知    3 東京    1 大阪    2 栃木    1 石川    3 A列のデータに重複はなく、B列のデータには重複があります。 B列の数字を検索値として振り分けるような形でA列の値を表引きしたいです。 表引き先は Sheet2のB列の複数セルに1が入力済みの状態。 Sheet3のB列の複数セルに2が入力済みの状態。 Sheet4のB列の複数セルに3が入力済みの状態。 例えば Sheet2 A        B    1    1    1    1    1 Sheet3 A        B    2    2    2    2    2 Sheet4 A        B    3    3    3    3    3 以上の各シートが以下のようになるようにしたいです。 Sheet2 A     B 東京 1 栃木 1 1 1 1 Sheet3 A     B 和歌山 2 大阪 2 2 2 2 Sheet4 A     B 愛知 3 石川 3 3 3 3 Sheet2-4のA列に各B列のデータに一致する値をSheet1から表引きしたいです。例えばSheet2に関して、東京、栃木と出てしまったら後のA列は空欄になるようにしたいです。A列数字が表示されていたらB列にあるものとしてください。 フィルタとかでの手作業でなく、何とか関数で持ってこられないでしょうか。 作業列とか必要でしたら教えてください。 わかりにくい表現ですみません。 よろしくお願いします。

  • エクセルでリストに対応するデータを別シートの表

    エクセルでリストに対応するデータを別シートの表に参照したいです。 「表シート」のB2にリストを作って、 (リストは「一覧表シート」のA,B,Cが入力されているセルを参照しています。) Aを選択すると101の下の段(B11)に、 「一覧表シート」のAの列101の111が入力されるようにしたいです。 Bを選択すると222、Cを選択すると333が入力できるようにしたいです。 この「表シート」の表がややこしいのですが、 建物の部屋番号に対応しているため、3階2階1階という順になっています。 関数で対応できるものでしょうか? 分かりにくい表ですが、よろしくお願いします。

  • エクセルのマクロを知りたい

    エクセルで,たくさんのデータが入力された【シートa】があります。 新しく【シートb】を作成して,そこに空白の表(1)~(10)までを作成します。 (ちなみに表(1)は1行から始まり100行まで,表(2)は101行から始まり200行まで・・・・といった感じです) 【シートb】の表(1)には,【シートa】でA列に「1」が入力されているデータを抽出して,それをB列の昇順に並べて記入しなさい。同様に,表(2)には,【シートa】でA列に「2」が入力されているデータを抽出して,それをB列の昇順に並べて記入しなさい。・・・というのを表(10)まで続けます。 上記のような命令をボタン一つで操作できるようなマクロを教えて欲しいのです。 お願いします。

  • エクセルで横長の表を一枚に印刷したい

    エクセルの表で横長のデータシートがあります。 この横長データをA4一枚に印刷したいのですが。 ページ設定の「次のページに合わせて印刷」ですと小さくなってしまうので、あるところで折り返して一枚に印刷したいのです。 たとえばデータ列はA~AK間であります 印刷は A~F G~X Y~AK をA4一枚に行を変えて印刷したいのです。 エクセルは2002です。 よろしくお願いいたします。

  • Excelでのデータ抽出

    Excelで外部結合風のデータ抽出を教えてください。 シートAとシートBに表形式のデータがあり、 シートAのA列の値とシートBのA列の値が一致するシートBの 行を抽出するのが目的です。 具体的には次のような感じです。 シートA         シートB ----------------  ---------------- A列 | B列 | C列     A列 | B列 | C列 ----------------  ---------------- 2  | 2B  | 2C      1  | 1BB | 1CC ----------------  ---------------- 4  | 4B  | 4C      2  | 2BB | 2CC ----------------  ---------------- 6  | 6B  | 6C      3  | 3BB | 3CC ----------------  ---------------- ↓ シートB ---------------- A列 | B列 | C列 ---------------- 2  | 2BB | 2CC ---------------- 以下以外の方法がありましたら教えてください。 1)アクセスに両シートのデータを取り込み、2つのテーブルを外部結合で連結させる。 2)マクロで二重ループをつくり、A列が一致した行を取り出す。 よろしくお願いします。

専門家に質問してみよう