プロが教えるわが家の防犯対策術!

こんにちは。

エクセルの串刺し集計ではなく、串刺し抽出のことでわからないので
教えて下さい。
・同じブック内に顧客20件のデータが管理されています。
・1シート毎が1顧客の単価帳になっています。
・A1に顧客の名前(同じくシート名もこれと同じく顧客の
 名前をつけています。)
・抽出したいのは顧客20件の各シートのA50:B53です。
同じブックの新規シートに「A1の顧客名」と(どれを抽出したか
わからなくなってしまうから必要なのかな?と思います。)
20シート全ての「A50:B53」を抜き出すことは可能でしょうか?
抜き出したいセル番地は20シート一緒です。
それぞれのシートはA2からA49までの抽出しなくてもいいセルは、 
不規則にだらだらと製品名や個々の単価が入力されています。

転職した会社でデータ管理がなされていなくてビックリしています。
とは言え私もマクロなどは経験がなく、なにをしたらできるのかが
さっぱり分かりません。
でも確か前の会社ではできていたのに・・・?
あれはアクセスだったのかなぁ? などという状態です。

VBAマクロの本を読みあさりましたが よくわかりませんでした。

とっかかりを教えていただければありがたいです。
よろしくお願いします。

A 回答 (3件)

c=c+10はおっしゃるとおり10行空けるために足してます。

一般的にプログラムでの"="は数学に意味と違って、右辺のものを左辺にすると言う意味に使われます。ですからc=c+10はもとのcに10を足したものをcにするということです。
c=1は1行目から書くという意味です。c=2にしておけば2行目からです。
さて、Range("A" & c)の意味ですが、
Range("A1").value="ABC"
Range("A2").value="ABC"
Range("A3").value="ABC"
の変化している数値について、変数を使用できます。
For i=1 to 3
Range("A" & i).value="ABC"
Next i
このあたりのことは、下記を見てください。
http://park14.wakwak.com/~aoiro-taro/old/taro/ha …

お勧めの本やサイトは、特にないんですが、分からない関数とか出てきたらその都度ネットや本で意味を理解しておくことだと思います。私もはじめの頃は"For Each ~"の意味が理解できないで苦労しました。
VBAはホントおもしろいですよ。エクセルの世界が100倍くらい広くなります。
それではがんばってください。
    • good
    • 0

ちょっと作りかえました。


A50:F53は
Sub xxxx()
c = 1
For Each SH In Sheets
If SH.Name <> "a" Then
Sheets("a").Range("A" & c).Value = SH.Name
SH.Range("A50:F53").Copy Sheets("a").Range("A" & c + 1)
c = c + 10
End If
Next
End Sub

A50:F53,A55:F58は
Sub xxx()
c = 1
For Each SH In Sheets
If SH.Name <> "a" Then
Sheets("a").Range("A" & c).Value = SH.Name
SH.Range("A50:F53", "A55:F58").Copy Sheets("a").Range("A" & c + 1)
c = c + 15
End If
Next
End Sub

この回答への補足

ありがとうございます!

今回もきちんと作動しました。
もっともっと勉強したくなり本日ExcelVBAトレーニングという本を
購入してみました。

suz83238さまの書いてくださったものを日本語にすると
・・・シートaにセルA&cの値を取得する。ということですよね?
でもこの&cはなんのことでょうか? c = c + 10とはなにに10加えるのですか?

なんども伺って申し訳ありません。
suz83238さまのお勧めの本やサイトなどはございますか?

補足日時:2008/03/13 23:45
    • good
    • 0
この回答へのお礼

あっ 今やってみてわかりました。
+10は 10列行間を空けるの意味ですか?
最初のc=1という部分がポイントですか?

お礼日時:2008/03/13 23:58

シートを1つ増やします。

そのシート名を「a」とします。試しに下記をやってみてください。

Sub xxx()
c = 1
For Each sh In Sheets
If sh.Name <> "a" Then
Sheets("a").Range("A" & c).Value = sh.Name
Sheets("a").Range("A" & c + 1 & ":B" & c + 4).Value = sh.Range("A50:B53").Value
c = c + 6
End If
Next
End Sub
    • good
    • 0
この回答へのお礼

さっそくの回答をありがとうございました!!

できました! すごく嬉しいです。
全部手作業でやるのかと思っていたので感激しました。

マクロの素人で申し訳ありませんが
A50:B53のところの範囲を広げたい場合はどこを直したらよろしいのでしょうか?
別件でもう少し広範囲(例えばA50:F53)横に長い範囲の場合は?と
どうなるのですか?
またA50:F53,A55:F58のように範囲指定を2箇所することもできるのですか?

お礼日時:2008/03/12 22:59

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