
知恵をお貸しください。
今、テストの点数表を作成しています。
下記の画像のように、結合したセルをVBAを使って抽出出来たらと考えています。
セルを結合しているので、普通に抽出すると1行になってしまいました。
そこで、ネットで調べたところ、表のセル以外のセルにIF関数を挿入、オートフィルでコピー、
コピーしたものを隣の列に「値で貼付」、表の氏名にあたるC6、7に「数式で貼付」すると
結合したままで抽出することが出来ました。
※表以外のセルAM6に、IF(C6="",AM5,C6)を挿入→オートフィルでAM7にコピー→隣の列に「値で貼付」
AM5 AN5
AM6山田 太郎 AN6山田 太郎
AM7山田 太郎 AN7山田 太郎
「値で貼付」したAN6、7をコピー→氏名にあたるC6,7に「数式で貼付」
これを、オートフィルターと合わせてマクロで自動化出来ればと思うのですが、可能なのでしょうか?
名前抽出か高校名抽出のボタンを押せば、結合したセルで抽出出来るといいなと思っています。
私自身がまだ簡単なマクロしか組めないのですが、皆さんの知恵をお借り出来ればと思います。
分かりにくい文章で申し訳ありませが、宜しくお願い致します。

A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
好みにもよりますが、VBAでやるなら特にオートフィルタにこだわる必要はないと思います。
対象外の行を非表示にすれば良いだけなので…。例えば、こんな感じです。
Sub sample()
Dim myRng As Range
Dim c As Range
Dim firstAddress As String
Application.ScreenUpdating = False
Cells.EntireRow.Hidden = False
With Range("C6:C" & Cells(Rows.Count, "G").End(xlUp).Row)
Set c = .Find(Range("D2").Value, LookIn:=xlValues, LookAt:=xlPart)
If Not c Is Nothing Then
firstAddress = c.Address
Do
If myRng Is Nothing Then
Set myRng = c
Else
Set myRng = Union(myRng, c)
End If
Set c = .FindNext(c)
If c Is Nothing Then Exit Do
If c.Address = firstAddress Then Exit Do
Loop
End If
.EntireRow.Hidden = True
End With
If Not myRng Is Nothing Then
For Each c In myRng
c.MergeArea.EntireRow.Hidden = False
Next
End If
Application.ScreenUpdating = True
End Sub
ありがとうございます。
上司からの指示がオートフィルターでということですので・・。
でも、非表示でという発想が思いつかなかったので勉強になりました。
No.2
- 回答日時:
こちらでは問題なく抽出できていますので、
貴方様のデータが、添付された図と違っているとしか考えられません。
>1行のみの抽出で名前が入っている行が全て抽出されてしまいました
のような動作はCells(1, "D")に値が記入されていたら考えられません。
No.1
- 回答日時:
これでどうかな
'図の左上がA1として、セルアドレスを書いています。
'AM列を作業用に使っています。
Sub 名前抽出AutoFilter()
Dim iRow As Long, xRow As Long
Dim NameCol As String
Dim FilterCol As String
Dim ArrayArea
Dim FilterRge As Range
NameCol = "C"
FilterCol = "AM"
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
xRow = Cells(Rows.Count, NameCol).End(xlUp).Row + 1
ArrayArea = Cells(1, NameCol).Resize(xRow).Value
ArrayArea(4, 1) = "作業列"
For iRow = 5 To xRow
If ArrayArea(iRow, 1) = "" Then ArrayArea(iRow, 1) = ArrayArea(iRow - 1, 1)
Next iRow
Cells(1, FilterCol).Resize(xRow).Value = ArrayArea
Set FilterRge = Range("A4:" & FilterCol & xRow)
FilterRge.AutoFilter _
Field:=Cells(1, FilterCol).Column, _
Criteria1:=Cells(1, "D").Value
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでオートフィルタのボ...
-
エクセルのオートフィルタで最...
-
エクセルで時刻(8:00~20:00)...
-
Excelのオートフィルタで非表示...
-
エクセル関数で、数字の入った...
-
エクセルフィルターオプション...
-
時間の条件でオートフィルタを...
-
エクセルで検索窓のようなもの...
-
なぜShowAllDataだとうまく行か...
-
虫食い表の別シートへの空白詰...
-
エクセルで、条件に一致した行...
-
Excelのフィルターで抽出した状...
-
【excel】リスト内の条件にあっ...
-
Excelマクロ オートフィルタ可...
-
EXCEL VBAで条件付き保護について
-
エクセルのオートフィルタの設...
-
エクセルの偶数行(奇数行)の抽出
-
Excelで文字を入力と自動的にフ...
-
Excel 非表示の列を飛ばして合...
-
オートフィルターで一つずつ抽...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでオートフィルタのボ...
-
エクセルで時刻(8:00~20:00)...
-
エクセルのオートフィルタで最...
-
Excelのオートフィルタで非表示...
-
エクセル関数で、数字の入った...
-
エクセルの偶数行(奇数行)の抽出
-
Excelで、ブック中すべてのシー...
-
access マクロでのフィルタの...
-
Excelのフィルターで抽出した状...
-
エクセルで、条件に一致した行...
-
Excel共有ブックのオートフィル...
-
オートフィルタで選択したデー...
-
エクセルにて、フィルタをかけ...
-
【EXCEL】条件に一致した最新デ...
-
可視セルを対象としたcountifが...
-
【Excel/関数/条件付き書式】月...
-
【excel】リスト内の条件にあっ...
-
なぜShowAllDataだとうまく行か...
-
Excel2003 オートフィルタで「...
-
データの抽出を教えてください
おすすめ情報
項目が増えた為、作業列をQKとQLに変更してマクロを組み立ててみました。
マクロの記録を使ってほぼ編集してないので、かなり拙いコードだと思います(^^;
これを実行したところ、「このブックでマクロが使用できないか、または全てのマクロが無効になっている可能性があります。」という表示が出ました。
マクロの設定等は変更していないのですが・・。
コードが間違っているからとかなのでしょうか?
Range("QK6").FormulaR1C1 = "=IF(RC[-450]="""",R[-1]C,RC[-450])"
Range("QK6").AutoFill Destination:=Range("QK6:QK209"), Type:=xlFillDefault
Range("QK6:QK209").Select
Selection.Copy
Range("QL6:QL209").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Copy
Range("C6:C209").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A5:G5").Select
Application.CutCopyMode = False
ActiveCell.Range("A1:G1").Select
Selection.AutoFilter
ActiveSheet.Range("$A$5:$G$209").AutoFilter Field:=3, Criteria1:="*" & Range("D2").Value & "*"
Range("QK6:QL211").Select
Selection.ClearContents
文字数がオーバーして分けて投稿しました。
見にくくてすみません。
ご意見いただければ幸いです。