[[20100908190319]] 『表示変更』(マツコ) ページの最後に飛ぶ

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

 

『表示変更』(マツコ)

		4062	4063	4080	
A	59.00 	10	20	30	7,400
B	34.00 	10	20	30	4,200
C	46.00 	30	20	10	5,600

上記のデータを

A 4062 10 59.00 7400

A 4063 20 59.00 7400

A 4080 30 59.00 7400

B 4062 10 34.00 4200

B 4063 20 34.00 4200

B 4080 30 34.00 4200

C 4062 30 46.00 5600

C 4063 20 46.00 5600

C 4080 10 46.00 5600

の形式にしたいのですが、
簡単な方法ありますか?
宜しくお願いします。

エクセル2003です。


 こんばんは
 Sheet1 から Sheet2 へ転記します。
 Sub test()
    Dim i   As Long
    Dim j   As Long
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim r   As Range
    Dim c   As Range

    Application.ScreenUpdating = False
    Set sh1 = Worksheets("Sheet1"): Set sh2 = Worksheets("Sheet2")
    sh2.UsedRange.ClearContents
    With sh1
        i = 1
        Set c = .Rows(1).SpecialCells(xlCellTypeConstants)
        j = c.Cells.Count
        For Each r In .Range("A:A").SpecialCells(xlCellTypeConstants)
            c.Copy
            sh2.Cells(i, 2).PasteSpecial Transpose:=True
            r.Copy sh2.Cells(i, 1).Resize(j)
            r.Offset(, 2).Resize(, j).Copy
            sh2.Cells(i, 3).PasteSpecial Transpose:=True
            r.Offset(, 1).Copy sh2.Cells(i, 4).Resize(j)
            r.Offset(, j + 2).Copy sh2.Cells(i, 5).Resize(j)
            i = i + j
        Next
    End With
    Application.ScreenUpdating = True
End Sub
 (ウッシ)

 (ウッシ)さん
ご回答ありがとうございました。
すいません!!!
難しく意味が分かりません・・・・・
分かりやすい方法ありますか?

宜しくお願い致します。


 こんにちは
 Sheet1 にセルA1から
	A	B	C	D	E	F
1			4062	4063	4080	
2	A	59.00 	10	20	30	7,400
3	B	34.00 	10	20	30	4,200
4	C	46.00 	30	20	10	5,600
のように入ったデータをSheet2 に並び替えて転記してます。

 ブックを開いた状態で Altキーを押しながら F11キーを押すとマクロをセットする画面になりますので
その画面のメニューの「挿入」「標準モジュール」をクリックし、表示されたエディタ画面に上のコードを
コピーして貼り付けます。
 Sheet1 に戻って、メニューのマクロ実行ボタンで「test」を実行します。
 マクロ実行ボタンが無ければ、メニューの「ツール」「マクロ」「マクロ」で「test」を実行します。

 一応手作業で出来る内容をマクロにしただけです。

 (ウッシ)

 (ウッシ)さん
本当に本当にありがとうございます!!
すいません。
マクロを使ったことありません。。。
上記のようにやってみたのですが、分かりませんでした。
マクロを調べたのですが、イマイチ・・・
手打ちで並び替えるしかないですかね・・・・・。


 こんにちは
 どの部分が分からないのですか?
 データ量が少なくて一度だけの処理なら手作業でもいいと思いますけど。
 (ウッシ)

こんにちは。。
データ量は微妙にあるんです・・・
スイマセン。例を変えていいですか・・・

	1社	2社	3社	原価	納品単価
A品	10	20	30	5,900	7,400
B品	10	20	30	3,400	4,200
C品	30	20	10	4,600	5,600


.
.

			原価	納品単価
A品	1社	10	5,900	7,400
A品	2社	20	5,900	7,400
A品	3社	30	5,900	7,400
B品	1社	11	3,400	4,200
B品	2社	22	3,400	4,200
B品	3社	33	3,400	4,200
C品	1社	100	4,600	5,600
C品	2社	200	4,600	5,600
C品	3社	300	4,600	5,600

のようになんですが・・・・
可能なんですか?
頭悪くてすいません!!!!
もう一度お願いします!!


 ちょっと手間がかかりますので、ウッシさんのマクロがオススメですが。
 ご参考まで、こういう手法もあるということで。

 「データ」メニューから「ピボットテーブルとピボットグラフ レポート...」をクリックします。
 「分析するデータのある場所」を「複数のワークシート範囲」にし、「次へ」
 「自動」になっていることを確認し、「次へ」
 「範囲」に

 	1社	2社	3社
 A品	10	20	30
 B品	10	20	30
 C品	30	20	10

 の範囲だけを選択し、「追加」ボタンをおし、「完了」をクリック。

 出てきた表の

 合計/値	「列」			
 「行」	1社	2社	3社	総計
 A品	10	20	30	60
 B品	10	20	30	60
 C品	30	20	10	60
 総計	50	60	70	180

 「列」と「行」という文字の位置を反対にします。つかんで引っ張って移動してください。
 つまり

 合計/値	「行」			
 「列」	A品	B品	C品	総計
 1社	10	10	30	50
 2社	20	20	20	60
 3社	30	30	10	70
 総計	60	60	60	180

 こういう表になります。
 これができたら「総計」と「総計」の交点の数字(上記では180)をダブルクリック。
 すると

 行	列	値	ページ1
 A品	1社	10	アイテム1
 B品	1社	10	アイテム1
 C品	1社	30	アイテム1
 A品	2社	20	アイテム1
 B品	2社	20	アイテム1
 C品	2社	20	アイテム1
 A品	3社	30	アイテム1
 B品	3社	30	アイテム1
 C品	3社	10	アイテム1

 という表になります。
 あとは「ページ1」の列を消し、変わりに「原価」「納品単価」と入れ、
 「原価」の下に
 =VLOOKUP($A2,Sheet1!$A$2:$F$4,COLUMN(E1),0)
 (Sheet1!$A$2:$F$4の部分は元表の範囲に変えてください。その際$マークはつけてくださいね)
 と入力し、隣と下に必要な分だけフィルコピーすればできあがりです。

 (すずめ)

P.S 書き忘れ・・・必要に応じてソートしてください・・・


オフセットでずらしながら表示するだけですが

  A	B	C	D	E	F
 	1社	2社	3社	原価	納品単価
1 A品	10	20	30	5,900	7,400
2 B品	10	20	30	3,400	4,200
3 C品	30	20	10	4,600	5,600
4 略...

だとして

 H2に =OFFSET($A$2,INT(ROW(A3)/3)-1,0)
 I2に =OFFSET($B$1,0,MOD(ROW(A3),3))
 J2に =OFFSET($B$2,INT(ROW(A3)/3)-1,MOD(ROW(A3),3))
 K2に =OFFSET($E$2,INT(ROW(A3)/3)-1,0)
 L2に =OFFSET($F$2,INT(ROW(A3)/3)-1,0)

あとはH2からL2を下にフィルで。

(ramrun)


 こんにちは
 修正しました。
 Sub test1()
    Dim i   As Long
    Dim j   As Long
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim r   As Range
    Dim c   As Range

    Application.ScreenUpdating = False
    Set sh1 = Worksheets("Sheet1"): Set sh2 = Worksheets("Sheet2")
    sh2.UsedRange.ClearContents
    With sh1
        i = 2
        Set c = .Range("B1:D1")
        j = c.Cells.Count
        For Each r In .Range("A:A").SpecialCells(xlCellTypeConstants)
            c.Copy
            sh2.Cells(i, 2).PasteSpecial Transpose:=True
            r.Copy sh2.Cells(i, 1).Resize(j)
            r.Offset(, 1).Resize(, j).Copy
            sh2.Cells(i, 3).PasteSpecial Transpose:=True
            r.Offset(, j + 1).Copy sh2.Cells(i, 4).Resize(j)
            r.Offset(, j + 2).Copy sh2.Cells(i, 5).Resize(j)
            i = i + j
        Next
    End With
    sh2.Range("D1:E1").Value = Array("原価", "納品単価")
    Application.ScreenUpdating = True
End Sub
こんな感じで。
(ウッシ)

出来ました!!!!!!!

(すずめ)さん
(ramrun)さん
(ウッシ)さん

本当に本当にありがとうございます!!
それぞれのやり方で出来ました!!
みなさん凄い!!

ピボットや関数、マクロにはビビリました!!
自分がやっていた事がワープロレベルでした・・・・

ぜひまた利用させていただきます!!


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.