重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【終了しました】教えて!gooアプリ版

いくつか検索して試してみましたが、なかなかうまくいかないので
どうかご教授ください。
画像のように、あ行・か行のシートでG列に★マークがついているデータのみ抽出し
結果シートへ行ごと自動表示したいのですが、可能でしょうか?
宜しくお願いします。

「【エクセル】複数シートの特定のセル(同じ」の質問画像

A 回答 (3件)

元データのH列と結果のF列G列(それぞれ他の位置の列でも可)を補助として使わせて貰えるなら、数式で可能です。


個別の関数についても説明が欲しい場合は追記するので教えてください。

あ行シートのH1は空欄もしくは0にしておきます。
か行シートのH1は=あ行!H1+COUNTIF(あ行!G:G,"★")とします。
これらはさ行以降にも流用できるように、あえてこのような形にしています。
さ行の場合はか行に入力したものの、あ行の所をか行に変えてください。
内容としては、その前の行のシートがおわるまでに★、がいくつあったかを表示させます。

H2以降はあ行か行(さ行以降も)全部同じです。結果シートは別ですが。
H2=IF(G2="★","★"&COUNTIF(G$1:G2,"★")+H$1,"")
これを必要な行の分だけコピーしてください。
内容としては、★が付いてたら★に番号を付けて表示するものです。

あとは結果シートです。
まずG2(G3以降コピー)に該当するシートを表示させます。
G2=IF(ROW()-1<=か行!H$1,"あ","か")&"行!"
さ行以降がある場合は、IFの中にIFを重ねていくことになります。
必要であれば書くので聞いてください。

H2(H3以降コピー)に、該当する行番号を表示させます。
H2=MATCH("★"&ROW()-1,INDIRECT(G2&"H:H"),0)

A2(A3以降コピー)は、今作った2つを利用すれば簡単です。
A2=INDIRECT($G2&"A"&$H2)

B〜FについてはAをコピーして、Aの所をそれぞれB〜Fに変えてください。
コピーだけで可能にもできますが、式が長くなるので5個くらいなら直接書き換えた方が早いです。

必要な行数コピーすれば求めた表になると思います。
必要以上にコピー(★が5個しかないのに6行以上作る等)すると、エラー表示になります。
エラーが表示されないようにするには式を追加する必要があるので、必要であれば言ってください。
    • good
    • 0
この回答へのお礼

こんばんは。
教えてくださりありがとうございます。
頂いた内容で試してみたところ、無事に反映できました!
ありがとうございます!m(_ _)m

>G2=IF(ROW()-1<=か行!H$1,"あ","か")&"行!"
>さ行以降がある場合は、IFの中にIFを重ねていくことになります。

さ行以降がある場合、どのように記述したら良いか教えて頂けませんか・・・?
宜しくお願いします。

お礼日時:2017/01/25 21:18

このようなものはいかがでしょうか?


---------------------------------------------------------------------
Sub 集計()

Dim 終 As Long
Dim 行 As Long
Dim 列 As Long
Dim 先 As Long

Sheets("結果").Select
終 = Cells(Rows.Count, 1).End(xlUp).Row
If 終 < 2 Then 終 = 2
Range(Cells(2, 1), Cells(終, 6)).ClearContents
先 = 2

Sheets("あ行").Select
終 = Cells(Rows.Count, 7).End(xlUp).Row
If 終 >= 2 Then
For 行 = 2 To 終
If Cells(行, 7).Value = "★" Then
For 列 = 1 To 6
Sheets("結果").Cells(先, 列).Value = Cells(行, 列).Value
Next
先 = 先 + 1
End If
Next
End If

Sheets("か行").Select
終 = Cells(Rows.Count, 7).End(xlUp).Row
If 終 >= 2 Then
For 行 = 2 To 終
If Cells(行, 7).Value = "★" Then
For 列 = 1 To 6
Sheets("結果").Cells(先, 列).Value = Cells(行, 列).Value
Next
先 = 先 + 1
End If
Next
End If

Sheets("結果").Select

End Sub
---------------------------------------------------------------------
    • good
    • 0
この回答へのお礼

こんばんは。
教えてくださりありがとうございます!
私のスキル的に関数のほうが触りやすかったため、今回は関数で
試してみましたが、今度トライしてみます。
ありがとうございましたm(_ _)m

お礼日時:2017/01/25 21:16

こんばんは!



今回は「あ行」シートと「か行」シートだけの抽出でよいのですね?
手っ取り早くVBAでやってみました。
一例です。

Alt+F11キー → メニュー → 挿入 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)マクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub Sample1()
Dim i As Long, k As Long, lastRow As Long 'この行から//
Dim wS As Worksheet, myAry As Variant
myAry = Array("あ行", "か行") '←Sheetを増やしたい場合、シート名を追加//
With Worksheets("結果")
lastRow = .Cells(Rows.Count, "B").End(xlUp).Row
If lastRow > 1 Then
Range(.Cells(2, "A"), .Cells(lastRow, "F")).ClearContents
End If
For k = 0 To UBound(myAry)
Set wS = Worksheets(myAry(k))
For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
If wS.Cells(i, "G") = "★" Then
.Cells(Rows.Count, "B").End(xlUp).Offset(1, -1).Resize(, 6).Value = _
wS.Cells(i, "A").Resize(, 6).Value
End If
Next i
Next k
End With
End Sub 'この行まで//

※ 関数でないので
データ変更があるたびにマクロを実行する必要があります。m(_ _)m
    • good
    • 0
この回答へのお礼

こんばんは!
教えていただきありがとうございます。
お礼が遅くなり申し訳ありません。
今回は関数で試してみましたが、VBAを使ってもできるんですね。
今度試してみます!ありがとうございましたm(_ _)m

お礼日時:2017/01/25 21:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!