[[20100607153039]] 『データの抽出転記&空白セルを詰めたい!』(やまだ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データの抽出転記&空白セルを詰めたい!』(やまだ)

教えてください!!

以下、シート@表→シート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

・・いえ、申し訳ありません!2行目から始まっています。(やまだ)

 こんな表イメージで考えました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.