teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記:コードをちょっと修正

2020/03/31 01:23

投稿

Y.H.
Y.H.

スコア7918

answer CHANGED
@@ -1,4 +1,4 @@
1
- このような表があったとして
1
+ このような表(シートA)があったとして
2
2
  |-|A|B|C|
3
3
  |:--:|:--|:--|:--|
4
4
  |1|北海道|名前1|ほげほげ|
@@ -10,20 +10,24 @@
10
10
  上の表の場合、「名前2」「名前4」がDebug.Printされます
11
11
 
12
12
  ```VBA
13
- Sheets("Sheet1").Select
14
- ActiveSheet.Range("A1").AutoFilter Field:=1, Criteria1:="東京都"
13
+ Sheets("シートA").Range("A1").AutoFilter Field:=1, Criteria1:="東京都"
15
-
14
+ With Sheets("シートA").Range("A1").CurrentRegion.Offset(1, 0) ' Offset()でタイトル行を除外しています。
16
- Dim targetRow As Range
15
+ Dim targetRow As Range
17
- With Range("A1").CurrentRegion.Offset(1, 0) ' Offset()でタイトル行を除外しています。
18
- ' フィルター後の行でループする
16
+ ' フィルター後の行(SpecialCells(xlCellTypeVisible)抽出)でループする
19
17
  For Each targetRow In .Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Rows
20
18
  ' targetRow がフィルター後の1行のRangeオブジェクトになります。
19
+ Debug.Print targetRow.Columns(1).Text ' A列の値
21
20
  Debug.Print targetRow.Columns(2).Text ' B列の値
22
-
21
+ Debug.Print targetRow.Columns(3).Text ' C列の値
23
22
  ' ここで、以下を行ってください。
24
- ' ②targetRowから名前を抽出(targetRow.Columns(2).Text でよい?)し、
23
+ ' ②targetRowから名前(targetRow.Columns(2).Textでよい?)を抽出し、
25
- ' シートBの特定のセルにセットする。
24
+ ' シートBの特定のセル(例としてX3)にセットする。↓こんな感じ?
25
+ ' Sheets("シートB").Range("X3").value = targetRow.Columns(2).Text
26
- ' ③シートBのPDF出力を行う。
26
+ ' ③シートBのPDF出力を行う。↓こんな感じ?
27
+ ' Sheets("シートB").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
28
+ ' targetRow.Columns(2).Text & ".pdf", Quality:=xlQualityStandard, _
29
+ ' IncludeDocProperties:=True, IgnorePrintAreas:=False, _
30
+ ' OpenAfterPublish:=False
27
31
  Next targetRow
28
32
  End With
29
33
  ```