[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『データの抽出転記&空白セルを詰めたい!』(やまだ)
教えてください!!
以下、シート@表→シートA表のようにデータを転記したいのです。
金額の発生する[A]売上計上月と[C]金額だけを移し、
金額0の月(5月や3月等)は転記せず、詰めて表にしたいのです。
どのようにしたら良いか分からず・・ご教示いただけないでしょうか。
<シート@>
[A]売上計上月 [B]YES/NO [C]金額 [1] 4月 YES 210,000 [2] 5月 NO 0(関数の結果) [3] 6月 YES 210,000 ・ ・ ・ ・ ・ ・ [11] 2月 YES 210,000 [12] 3月 NO 0(関数の結果)
<シートA>
[A]売上計上月 [B]金額 [1] 4月 210,000 [2] 6月 210,000 ・ ・ [6] 2月 210,000
※シート@は[A]売上計上月が12ヶ月すべて載っています。
その中で計上すべき月(YES)には金額が記入され、計上しない月(NO)は金額0になっています。
例では隔月ですが、そうとも限りません。
[B]のYESとNOは別の数字を[C]の金額に移す為で、無視していただいても構いません。
[C]の金額は関数の結果だったり、入力した数字だったり色々です。
エクセルバージョン2003です。
どうぞ、宜しくお願いします。
オートフィルタ後に移動するのはいかがでしょう? (キリキ)(〃⌒o⌒)b
入力したらすぐ反映されるか、無理ならマクロボタンを押すか、
出来れば簡単にしたいのですか、如何でしょうか・・・。
>それが、シート@は担当者の入力シートになっているので、オートフィルタに掛けたり変更をしたくないのです・・・。 オートフィルタ後にコピーして、オートフィルタを解除じゃ駄目なんでしょうか? >入力したらすぐ反映されるか、無理ならマクロボタンを押すか、出来れば簡単にしたいのですか、如何でしょうか・・・。 とりあえず、こんな感じでいかがでしょう? Sub yamada() Dim tbl As Variant, x As Variant Dim i As Long, c As Long With Sheets("Sheet1") tbl = .Range("A1", .Range("C" & .Rows.Count).End(xlUp)) End With c = 0 ReDim x(1 To UBound(tbl, 1), 1 To UBound(tbl, 2)) For i = 1 To UBound(tbl, 1) If tbl(i, 3) <> 0 Then c = c + 1 x(c, 1) = tbl(i, 1) x(c, 2) = tbl(i, 3) End If Next i With Sheets("Sheet2") .Cells.ClearContents .Range("A1").Resize(, 2) = [{"売上計上月","金額"}] .Range("A2").Resize(UBound(x, 1), UBound(x, 2)) = x End With End Sub (キリキ)(〃⌒o⌒)b データが1行目からのようなのでチョイ修正
・・・なにぶんマクロを使用するのも久しぶりなので、少し勉強してから吟味し、使わせていただこうと思います!
>オートフィルタ後にコピーして、オートフィルタを解除じゃ駄目なんでしょうか?
・・・私よりもエクセルに弱い担当者達にシート@で入力・使用してもらい、シートAで印刷してもらおうと思うので、無理なのです。。
ちなみに、大変あつかましいのですが、マクロではなく、関数で引っ張ってくるのは、無理なのでしょうか??
関数でもできますが、データ量によっては重くなります。 データは、1行目から始まっているって事でよろしいでしょうか? (キリキ)(〃⌒o⌒)b
こんな表イメージで考えましたb Sheet1 [A] [B] [C] [1] 売上計上月 YES/NO 金額 [2] 4月 YES 210000 [3] 5月 NO 0 [4] 6月 YES 210000 [5] 7月 YES 140000 [6] 8月 NO 0 [7] 9月 YES 140000 [8] 2月 YES 210000 [9] 3月 NO 0 Sheet2 [A] [B] [1] 売上計上月 金額 [2] 4月 210000 [3] 6月 210000 [4] 7月 140000 [5] 9月 140000 [6] 2月 210000 Sheet2 A2 =IF(COUNTIF(Sheet1!$C$2:$C$100,">0")<ROW(A1),"", INDEX(Sheet1!$A$2:$C$100,SMALL(IF(Sheet1!$C$2:$C$100<>0,ROW($A$1:$A$99),""),ROW(A1)),(COLUMN(A1)-1)*2+1)) ↑ 上記は配列数式です。 Ctrl + Shift + Enter で確定。 { 数式 }となればOK 必要範囲までフィルコピー ※範囲は適当です。 (キリキ)(〃⌒o⌒)b
作業列が使用できればもう少し簡単でしょうか? Sheet1 [A] [B] [C] [D] [1] 売上計上月 YES/NO 金額 [2] 4月 YES 210000 1 [3] 5月 NO 0 [4] 6月 YES 210000 2 [5] 7月 YES 140000 3 [6] 8月 NO 0 [7] 9月 YES 140000 4 [8] 2月 YES 210000 5 [9] 3月 NO 0 D列に作業列 D2 =IF(C2>0,COUNT($D$1:D1)+1,"") 以下コピー Sheet2 A2 =IF(MAX(Sheet1!$D:$D)<ROW(A1),"",INDEX(Sheet1!$A$2:$C$100,MATCH(ROW(A1),Sheet1!$D$2:$D$100),(COLUMN(A1)-1)*2+1)) 必要範囲までフィルコピー ※範囲は適当です。 (キリキ)(〃⌒o⌒)b
・・更に、追加の質問で大変申し訳ないのですが、あわよくば教えていただけますでしょうか。
シート@とシートAの項目が違う場合(「売上計上月」→「請求月」になりました。)
かつ、項目の並びが↓のように同じ列になった場合・・・
可能でしょうか??
Sheet1 [A] [B] [C] [1] 売上計上月 YES/NO 金額 [2] 4月 YES 210000 [3] 5月 NO 0 [4] 6月 YES 210000 [5] 7月 YES 140000 [6] 8月 NO 0 [7] 9月 YES 140000 [8] 2月 YES 210000 [9] 3月 NO 0 Sheet2 [A] [1] 請求月 [2] 金額 [3] 4月 [4] 210000 [5] 6月 [6] 210000 [7] 7月 [8] 140000 [9] 9月 [10] 140000 [11] 2月 [12] 210000
作業列を使用する方で、こんな感じでどうでしょう? Sheet2 [A] [1] 請求月 [2] 金額 [3] 4月 [4] 210000 [5] 6月 [6] 210000 [7] 7月 [8] 140000 [9] 9月 [10] 140000 [11] 2月 [12] 210000 Sheet2 A3 =IF(MAX(Sheet1!$D:$D)<INT((ROW(A1)-1)/2)+1,"",INDEX(Sheet1!$A$2:$C$100,MATCH(INT((ROW(A1)-1)/2)+1,Sheet1!$D$2:$D$100),IF(MOD(ROW(A1),2),1,3))) ※範囲は適当です。 (キリキ)(〃⌒o⌒)b
無事出来ました!一人では途方に暮れていたので、本当に助かりました!!
空白詰めるで検索したときからキリキさんのお名前は拝見していましたが、
具体的な個別の案件で答えが出るのって、こんなに嬉しいんですね。
ありがとうございましたっ。
(やまだ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.