質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

3931閲覧

Excel マクロ プルダウンによりデータを絞った行を別シートのセルにペーストしてPDF出力したい。

kazuki_miyabi

総合スコア5

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/03/30 16:15

初めまして。Excelでマクロを作成しているのですが、私の知識不足によりわからないことがありましたので、皆様の知識をお借りできればと思います。

いろいろ不手際がありましたら申し訳ありません。よろしくお願いします。

前提環境

ExcelにてシートA、シートB等が存在している。

シートA⇒名前、都道府県が一覧表になっている。プルダウンメニューで都道府県を選択可能。
シートB⇒とあるセルに名前を張り付けるとその名前の情報を自動的に入力するマクロが組まれている。

###実行したいこと

①シートAにて都道府県を選択するとその条件に対応する人物名が絞り込まれる。
②シートAで選択した都道府県名に対応する人物の名前をコピーしてシートBの特定のセルに貼り付けを行う。
③シートBのPDF出力を行う。

上記の①から③を繰り返すことで、対応する都道府県の人全ての数のPDFを出力するマクロを作成したいと思っています。
(総数20名で東京都が8人該当するなら8個のPDFを出力したいということです。)

###現在のマクロ

とりあえず、マクロの保存で下記ような一連の流れは記録できたのですが、これを繰り返す処理のマクロを書くことができません。
(下記の場合は東京都に該当する人物を絞り込んでいます。)

vba

1 Sheets("シートA").Select 2 ActiveSheet.Range("都道府県を選択するセル").AutoFilter Field:=15, Criteria1:="東京都" 3 ActiveWindow.SmallScroll ToRight:=-5 4 5 6 Sheets("シートA").Select 7 Range("A1").Select 8 Selection.Copy 9 Sheets("シートB").Select 10 ActiveSheet.Paste 11 Application.CutCopyMode = False 12 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 13 "該当する人物名".pdf", Quality:=xlQualityStandard, _ 14 IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ 15 False

###特にわからないこと

シートAで選択した都道府県に該当する人物を絞っているため、Excelの行がA1、A4、A9、A10、A13といったように飛び飛びになってしまっているため、繰り返す処理をどうすればよいのかわからないという状態です。

繰り返し処理はDo~Loop等使ったのですが、うまくいきません。

特定の条件で絞った条件のデータをコピーして貼り付け、PDFとして発行という一連の流れを効率よく書ける方法があれば教えていただきたいです。

拙い文章で申し訳ありませんがご教授いただけますと幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yureighost

2020/03/30 23:07

シートの状況がわからないのでこれだけでは答えにくいですが、 FindやMatch等の検索機能を利用することになると思います。
meg_

2020/03/30 23:42

「繰り返し処理はDo~Loop等使ったのですが、うまくいきません。」とありますが、どううまくいかなかったのか不明です。こちらのコードも掲載しましょう。
kazuki_miyabi

2020/03/31 15:14

いろいろ言葉が足らず、すみませんでした。 今回はY.H.様から回答をいただいたのでクローズしますが、次回質問する際は表を用いる等わかりやすい質問の仕方を考えます。 お二人とも未熟な私に助言くださり本当にありがとうございます。
guest

回答1

0

ベストアンサー

このような表(シートA)があったとして

-ABC
1北海道名前1ほげほげ
2東京都名前2ふがふが
3埼玉県名前3ほげふが
4東京都名前4ふがほげ

以下のコードでフィルターした結果の行でループできます。
上の表の場合、「名前2」「名前4」がDebug.Printされます

VBA

1 Sheets("シートA").Range("A1").AutoFilter Field:=1, Criteria1:="東京都" 2 With Sheets("シートA").Range("A1").CurrentRegion.Offset(1, 0) ' Offset()でタイトル行を除外しています。 3 Dim targetRow As Range 4 ' フィルター後の行(SpecialCells(xlCellTypeVisible)で抽出)でループする 5 For Each targetRow In .Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Rows 6 ' targetRow がフィルター後の1行のRangeオブジェクトになります。 7 Debug.Print targetRow.Columns(1).Text ' A列の値 8 Debug.Print targetRow.Columns(2).Text ' B列の値 9 Debug.Print targetRow.Columns(3).Text ' C列の値 10 ' ここで、以下を行ってください。 11 ' ②targetRowから名前(targetRow.Columns(2).Textでよい?)を抽出し、 12 ' シートBの特定のセル(例としてX3)にセットする。↓こんな感じ? 13 ' Sheets("シートB").Range("X3").value = targetRow.Columns(2).Text 14 ' ③シートBのPDF出力を行う。↓こんな感じ? 15 ' Sheets("シートB").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 16 ' targetRow.Columns(2).Text & ".pdf", Quality:=xlQualityStandard, _ 17 ' IncludeDocProperties:=True, IgnorePrintAreas:=False, _ 18 ' OpenAfterPublish:=False 19 Next targetRow 20 End With

投稿2020/03/31 00:49

編集2020/03/31 01:23
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuki_miyabi

2020/03/31 15:11

Y.H.様、私の足らない文章で回答していただきありがとうございました。 回答していただいたものがまさしく、やりたかったことです。 参考にさせていただきます。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問