エクセルで12枚のシートに同じ表が1つずつ作ってあります。表の中は文字のセルも数式のセルもあります。各シートの同じセルにあるものを選び出して、別の新しいシートにある表の指定した部分に貼り付けたいのです。要するにシート間の串刺しをして別のところに貼り付けたいわけです。例を書きます。
元の表というのは例えば、「シート1はAさんのデータで名前、住所などが入力してある。シート2はBさん、シート3はCさん・・・」で、名前だけの一覧表を新しいシートに作る、ということがしたいのです。質問の意味わかっていただけましたでしょうか?よろしくおねがいします。

このQ&Aに関連する最新のQ&A

A 回答 (8件)

不規則なのは残念ですね。

VBAからはシートを番号で参照できるので簡単なのですが。
もし、VBAを使われるのであれば、
Sub GetSheetName()
Dim i As Integer
Dim dist_name As String
Dim sname As String

dist_name = ActiveSheet.Name

For i = 1 To Sheets.Count
sname = Sheets(i).Name
If sname = dist_name Then Exit For
ActiveCell.Offset(i - 1, 0).Value = sname
Next i
End Sub
のような簡単なものを書けば良いと思います。
上のコードは、シート名の列を作りたいシートのセル位置にカーソルを持っていき、マクロを実行すると一番目のシートからカーソルのあるシートまでのシート名のリストを作ります。

だいぶ前にやっぱり同じ様なことをやりたくて作った物です。

では。
    • good
    • 0
この回答へのお礼

せっかく回答をいただいたのに実はVBAについては全くわからず、教えていただいた式をどうしたらいいのかすらわからず・・・という状態でした。で、早速VBA(VB)の勉強をはじめたところです。今は少しだけですがわかります。
がんばります!
悩んでいたことは、シートが8枚と少なかったので、勢いにまかせて”貼り付け”でなんとか通り抜けました。はははつ!
全部自分で理解できるようになったらやってみます。

お礼日時:2001/04/01 18:29

補足です。

集計という表現は適切ではなかったかも知れませんが、mickjey2さんのようなコードの中に
Worksheets(dist_name).Activate
R = cells(Activesheet.Rows.Count, C).End(xlup).Row
Worksheets(dist_name).cells(R+1, C).value = _
Worksheets(i).cells(RR,CC).value
見たいなコードを入れれば可能かと思います。また、「シート間の串刺し」に関して既にヘルプはご覧になりましたか、、、。
注)R、RRは行変数、C,CCは列変数として目的に応じて設定してください。
固定値であれば、定数としてもかまいません。
    • good
    • 0
この回答へのお礼

ありがとうございました。実はVBAについては全くわからず、教えていただいた式をどうしたらいいのかすらわからず・・・という状態でした。で、早速VBA(VB)の勉強をはじめたところです。教えていただいたコードが読める
ようになるのはいったいいつになるのやら・・と思いつつ。
悩んでいたことは、シートが8枚と少なかったので、勢いにまかせて”貼り付け”でなんとか通り抜けました。

お礼日時:2001/04/01 18:21

もし、私がやるとすると、シート名をSheet1,Sheet2,....と最後に数字をつけていく名前にします。


こうやると、串刺しを入力するシートで、どこかのセルにSheet1と入れて、そのセルをマウスでドラッグ(右下の黒ポチ)すれば以下sheet2, sheet3, ...という一列ができあがります。

これさえすれば、後はIndirect関数で該当のセルを参照すればOKです。
たとえば、A1~A10にシート名が入っていて、各シートの C1セルを参照する場合は、

INDIRECT("'" & A1 & "'" & "!$C$1")

をB1に入れて、後はB2~B10にコピーすればいいわけです。

シート名が規則的じゃない場合は、VBAなどを使わないとちょっと困難かと。
(もしかしたらやり方があるかもしれませんが、ちょっと思いつきません)
    • good
    • 0
この回答へのお礼

なるほど、シート名を規則的なものにかえてしまうんですね。シート名が個人名なのでちょっとつかいにくいかな?と思いましたが、このアイデア何かの時に使わせていただきます。indirect関数 勉強します。
ありがとうございました。

お礼日時:2001/03/26 22:58

個人の複数のデータがシートごとに入力(定型)されていて、特定の項目(複数でも可)のみを別のシートに集計するということであれば、VBAを使えば簡単にできます。

10だろうが1000シートだろうがあっという間にできます。集計したい項目(セル番地)を変えることも可能ですし、集計先を他のブックやシートの特定の位置にコピーすることも簡単にできます。シート数の分だけ、項目の数だけコンピューターに自動的に集計させることも可能です。新しい個人データが増えた場合や項目数が据えた場合にも対応できます。最終行に自動的に追加していくことも簡単にできると思います。先ずはマクロに基本動作を記録して、不要部分を削除し、ループでまわせばOKです。具体的にシートのどのセルにデータが入っているかがわかれば、サンプルプログラムを作れますので、必要であれば詳細をお聞かせください。

この回答への補足

あのー、、集計じゃないんです。bupu4uさんの回答の中にあるように、「(各人毎のシートが全く同じ構造=同じ場所に対応するデータがあったとして。) 新しいシートで、セル毎に参照ブック名を変えられるか?ですよね」・・・これなんです。シートが100枚あったとして、特定の項目(例えば住所)だけを別のシートに100行楽に貼り付けられないか、ということです。100行ひとつひとつに参照セルを打ち込むのは手間ですので。
なんかエクセル詳しそうなので期待してま~す!
ps.いただいた回答おもしろそうですね。今回の質問とは別に、使ってみたいです。でもむずかしそう・・・

補足日時:2001/03/26 23:12
    • good
    • 0

#4の訂正です。


参照ブック名=>参照シート名
ブック名を1個づつ変えていくしかないと=>シート名…
です。
    • good
    • 0

補足に対する回答というか提案です。


(各人毎のシートが全く同じ構造=同じ場所に対応するデータがあったとして。)
新しいシートで、セル毎に参照ブック名を変えられるか?ですよね。
これはうまい案が思いつきません。1個入力したセルの数式をコピーして人数分だけ貼り付ける。あとは式を編集してブック名を1個づつ変えていくしかないと思います。このとき数式表示をオンにしておくと少し楽かもしれません。

ただし、名前のシートができたとして、次に住所のシートを作るのだったら簡単ですね。名前のシートをそのままコピーして参照セル名だけ 検索_置き換え するだけですから。
多分すでにご存知のことだと思いますが。m(__)m
    • good
    • 0
この回答へのお礼

シート名をたくさん打つのが大変なので簡単にできる方法がないかな、と思って質問しました。
置換ですね。そうですね・・・なるほど・・・
ありがとうございました。

お礼日時:2001/03/26 22:49

他シートのあるセルの内容をリンクさせるには、


1.リンク先のセル内で半角の「=」を入力します。
2.リンク元のセルをクリックで指定し、Enterで確定します。

これで、リンク先にリンク元の内容か反映されます。
又、他ブックでも同じ様な方法でリンクが出来ます。
    • good
    • 0
この回答へのお礼

私の質問の仕方が不十分だったようですね。シート名をたくさん打つのが大変なので簡単にできる方法がないかな、と思って質問しました。
でも早速の回答ありがとうございました

お礼日時:2001/03/26 22:45

名前の一覧表のシートのセルにに以下のように入れてください


Sheet2!B1(sheet2の行1列Bを表示する)

行列の表示は設定により違うかもしれませんが
シート名+!+表示元のセル でよいとおもいます。

やり方としては、一覧表のシートでデータを表示するセルを決め
そこを選択してエクセルの数式の編集
(ツールバーの「=」が表示されているところ)で「=}を押し
目的のシートに移動し、表示するデータ(セル)をクリックする。
そして「OK」を押せば一覧にほかのシートのセルの内容が表示されるはずです。

説明が下手ですが、、^^;

この回答への補足

早速の回答ありがとうございます。私にはおっしゃることがよく理解できてないんでしょうか?この方法だとシートが100枚あったらシート名を100回入力するというようにとれるんですが・・・
もしそうなら、コピーアンド貼り付け、またはリンク貼り付けの操作と手間が変わらない気がするんですけど。シート名を1つ入れさえすれば(例えばシート1)、表示先のシートでコピーアンドドラッグするとシート2以降のデータが表示されるんですか?
理解不足ですみません。よろしくおねがいします。

補足日時:2001/03/25 13:22
    • good
    • 0
この回答へのお礼

私の質問の仕方が不十分だったようですね。シート名をたくさん打つのが大変なので簡単にできる方法がないかな、と思って質問しました。
でも早速の回答ありがとうございました。

お礼日時:2001/03/26 22:44

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q同じブック内の、あるシートの表を別シートにリンク貼り付けしたのですが、貼り付けた側の空白のセルに0がついてしまう

エクセル97にて、
同じブック内の、あるシートの表を別シートに
「リンク貼り付け」したのですが、貼り付けた側の
空白の部分に「0」(日付の場合は「00/1/0」「1900/1/0」)がついてしまうのですが、
空白のままにする方法はありますでしょうか?

Aベストアンサー

ツール→オプション→表示→ゼロ値のチェックをはずしてみてください。
それで0が消えると思います。

Qマクロについて 複数セルの値を別シートの任意のセルにコピー貼り付けしたい

タイトルのとおり、シート1の離れた複数セルのそれぞれの値をシート2の任意のセルに貼り付けたいと考えました。
いろいろネットで調べましたが、結果、下記のようなものはできました。

Sub 貼り付け()
  Dim rc As Range
  Dim rp As Range
  Dim i As Long
  
  Set rc = Sheets("Sheet1").Range("A1, B1, C1, D1, F1")
  Set rp = Sheets("Sheet2").Range("E1, F2, G3, B4, D4")
  Sheets(rp.Parent.Name).Select
  For i = 1 To rc.Areas.Count
    rc.Areas(i).Copy
    rp.Areas(i).Select
    ActiveSheet.Paste link:=True
  Next i
  Application.CutCopyMode = False
End Sub

ですが、これではリンクの貼り付けになってしまうため、値の貼り付けをどうしたらできるか考えております。
こちらは、マクロに関してまったくの初心者です。いろいろ調べて見た目の結果、このマクロが一番望んでいたものに近かったので試してみました。が、値の貼り付けにはならないので、どうしたら値の貼り付けができるか教えていただけませんでしょうか?

これから、もっとマクロを勉強したいと考えております。
解説みたいなものも一緒にいただけるとありがたいです。

よろしくお願いします。

タイトルのとおり、シート1の離れた複数セルのそれぞれの値をシート2の任意のセルに貼り付けたいと考えました。
いろいろネットで調べましたが、結果、下記のようなものはできました。

Sub 貼り付け()
  Dim rc As Range
  Dim rp As Range
  Dim i As Long
  
  Set rc = Sheets("Sheet1").Range("A1, B1, C1, D1, F1")
  Set rp = Sheets("Sheet2").Range("E1, F2, G3, B4, D4")
  Sheets(rp.Parent.Name).Select
  For i = 1 To rc.Areas.Count
    rc.Areas(i).Copy
   ...続きを読む

Aベストアンサー

こんにちは!
せっかくコードをお考えのようなので別案はお望みではないかもしれませんが、
コピー&ペーストではなく、単に値の表示だけで良いと思います。

Sub Sample1()
Dim i As Long
Dim myAry1 As Variant, myAry2 As Variant

myAry1 = Array("A1", "B1", "C1", "D1", "F1")
myAry2 = Array("E1", "F2", "G3", "B4", "D4")
For i = 0 To UBound(myAry1)
Worksheets("Sheet2").Range(myAry2(i)).Value = Worksheets("Sheet1").Range(myAry1(i)).Value
Next i
End Sub

こんな感じでも大丈夫だと思います。

※ 今回は対象セルが少ないので、オーソドックスにコツコツやるのであれば

Sub Sample2()
Dim wS As Worksheet
Set wS = Worksheets("Sheet1")
With Worksheets("Sheet2")
.Range("E1") = wS.Range("A1")
.Range("F2") = wS.Range("B1")
.Range("G3") = wS.Range("C1")
.Range("B4") = wS.Range("D1")
.Range("D4") = wS.Range("F1")
End With
End Sub

といった感じですかね。m(_ _)m

こんにちは!
せっかくコードをお考えのようなので別案はお望みではないかもしれませんが、
コピー&ペーストではなく、単に値の表示だけで良いと思います。

Sub Sample1()
Dim i As Long
Dim myAry1 As Variant, myAry2 As Variant

myAry1 = Array("A1", "B1", "C1", "D1", "F1")
myAry2 = Array("E1", "F2", "G3", "B4", "D4")
For i = 0 To UBound(myAry1)
Worksheets("Sheet2").Range(myAry2(i)).Value = Worksheets("Sheet1").Range(myAry1(i)).Value
Nex...続きを読む

Qエクセル2003で別のマクロで選択したセルに別のシートからコピーして貼り付けるマクロ

別のマクロで選択したセルに別のシートからコピーして貼り付けるマクロ、どうしても、このマクロが作れないです。
難題すぎて・・・・
貼り付けるセルの値は選択ボタンによって変わる仕様ですが、エクセル2003で可能なんでしょうか?
難しすぎてコードが全然解らない状態です
どなたかご教授願えれば幸いです。

Aベストアンサー

モジュールレベルで変数を宣言すればどうでしょうか。
マクロが同じモジュールにがあるなら
Dim rng As Range
マクロが別のモジュールにあるなら
Public rng As Range

Sub a()
Set rng = ActiveSheet.Range("A1")
End Sub

Sub b()
MsgBox rng.Value
Set rng = Nothing
End Sub

[XL] Visual Basic for Applications 変数の適用範囲
​http://support.microsoft.com/kb/141693/ja

Q表から別シートに一覧表を作成したいのですが

Excel2003にて複数店舗のシフト管理をしているのですが、
初心者のうえ独学で学んだ為全く分かりません。
縦に日付、横に人が並んでいる表といえば分かりますか?
A1="日"、A2=1、A3=2…
B1="佐藤"、B2="山田"、B3="鈴木"
その交点にその人が行く店舗名が表示されている表を作成しています。
日 佐藤 山田 鈴木
1 A店  B店
2 C店      A店

そのデータから、
日付 応援に行く人 応援をもらう店舗
1   佐藤       A店
1   山田       B店
2   佐藤       C店
2   鈴木       A店

の様な表に変換しています。今までは手入力で変換していたため、
ミス等がないかチェックが大変で困っています。
何か良い方法がありましたら教えてください。
質問も初めてで分かりにくい所があるかもしれませんが
よろしくお願いします。

Aベストアンサー

Sheet1に次の様式の元データ
日 佐藤 山田 鈴木
1 A店  B店
2 C店      A店
があり、Sheet1に何らかのデータ変更をした際、直ちに
Sheet2に
日付 応援に行く人 応援をもらう店舗
1   佐藤       A店
1   山田       B店
2   佐藤       C店
2   鈴木       A店
の様式で表が自動更新される方法を提案します。

シート名「Sheet1」を右クリック→コード表示(V)にて、次のコードをコピー&ペースト、「×」クリックですべて完了。
あとは、Sheet1への入力操作だけです。

Private Sub Worksheet_Change(ByVal Target As Range)
Sheets("Sheet2").Cells.ClearContents
Sheets("Sheet2").Cells(1, 1).Value = "日付"
Sheets("Sheet2").Cells(1, 2).Value = "応援に行く人"
Sheets("Sheet2").Cells(1, 3).Value = "応援をもらう店舗"
r2 = 1
For r = 2 To Range("A65536").End(xlUp).Row
For c = 2 To 256
If Cells(r, c) <> "" Then
r2 = r2 + 1
Sheets("Sheet2").Cells(r2, 1).Value = Sheets("Sheet1").Cells(r, 1)
Sheets("Sheet2").Cells(r2, 2).Value = Sheets("Sheet1").Cells(1, c)
Sheets("Sheet2").Cells(r2, 3).Value = Sheets("Sheet1").Cells(r, c)
End If
Next c
Next r
End Sub

Sheet1に次の様式の元データ
日 佐藤 山田 鈴木
1 A店  B店
2 C店      A店
があり、Sheet1に何らかのデータ変更をした際、直ちに
Sheet2に
日付 応援に行く人 応援をもらう店舗
1   佐藤       A店
1   山田       B店
2   佐藤       C店
2   鈴木       A店
の様式で表が自動更新される方法を提案します。

シート名「Sheet1」を右クリック→コード表示(V)にて、次のコードをコピー&ペースト、「×」クリックですべて完了。
あ...続きを読む

Qエクセルでシート1のセルに入力すると別シートのセルに表示させるには

依頼されて会員証をエクセル2003で作っている最中です。
SHEET1に下記の様に会員証のベースを作ました。

[●●●の会]
会員番号 [SHEET2の会員番号列]
住所 [SHEET2の住所列]
氏名 [SHEET2の氏名列]
電話番号 [SHEET2の電話番号列]
[管理社名]

SHEET2にまだ空欄ですが、会員番号・住所・氏名・電話番号のリスト表を作りました。

ここからが課題でして、SHEET2に会員番号、住所とセルに打ち込んでいくと

SHEET1のそれぞれに対応したセルに表示させる為に

SHEET1のセルに、[=Sheet2!A3]と打ち込めば、

SHEET2のA3のセルが対応されますが、

これではそのセルしか対応しません。

SHEET2の1行目に会員番号、住所から打ち込んだものは、

単純にSHEET1の表示させたいセルに[=SHEET2!○○]を打ち込めば、

それが対応されます。

ただSHEET2の2行目は空白ですので、新たに打ち込んで対応させようとしても出来ません。

毎度毎度SHEET1の表示させたセルに[=SHEET2!○○]をしていくのは大変です。

新規にリストを打ち込むたびにSHEET1の会員証に

表示させる方法はどういったものがあげられるのでしょうか?

或いは、SHEET1の会員証ベースに打ち込んでいくとSHEET2のリストに

自動的に登録される仕組みの方がやりやすいのでしょうか?

数式も教えていただければ大変有難いです。

アクセスの方がやりやすいかもしれませんが、

依頼した方のPCにはアクセスは入っていないですし、

私自身もアクセスはイマイチの部分があります。

エクセルのマクロなるものを使えません。

年始早々に使用したいとの事ですので、
なんとか仕上げてあげたいとは思います。
宜しくお願い致します。

依頼されて会員証をエクセル2003で作っている最中です。
SHEET1に下記の様に会員証のベースを作ました。

[●●●の会]
会員番号 [SHEET2の会員番号列]
住所 [SHEET2の住所列]
氏名 [SHEET2の氏名列]
電話番号 [SHEET2の電話番号列]
[管理社名]

SHEET2にまだ空欄ですが、会員番号・住所・氏名・電話番号のリスト表を作りました。

ここからが課題でして、SHEET2に会員番号、住所とセルに打ち込んでいくと

SHEET1のそれぞれに対応したセルに表示させる為に

SHEET1のセルに、[=Sheet2!A3]と...続きを読む

Aベストアンサー

>次のA3に会員番号00002として打ち込み、会員種類を法人、以下違う人の名前や電話番号などを打ち込んでも、SHEET1では会員番号が変わるだけで、他は1行の情報のままです。。。。。。

=IF(B2="","",ROW())
こちらの式はA2セル入力の後下方向にコピーしてください、Sheet2の会員番号は会員種類に入力があると自動的に表示されます、直接入力はしないでください。
表示形式を00002としたいのであれば、Sheet2のA列とSheet1の会員番号セルをセルの書式設定のユーザー定義で00000としてください。

て入力で00002と入力してその表示になっているので有ればそれは文字列として設定されていると思います、文字列の場合はSheet1の会員番号の呼び出しのMAX関数が働きません。


>OFFSETは基準の端から端までを考えなくても良いという事で、会員番号の最大値と最終行は等しいから、C2でも良いし、D2でも良いのでしょうか?
>OFFSETの行数設定で(A:A)ではおかしい事になるのでしょうか?

OFFSETで求めているのはVLOOKUP関数の検索範囲の右下のセル番地です
http://officetanaka.net/excel/function/function/offset.htm
OFFSETの図解説明のサイトです。

>次のA3に会員番号00002として打ち込み、会員種類を法人、以下違う人の名前や電話番号などを打ち込んでも、SHEET1では会員番号が変わるだけで、他は1行の情報のままです。。。。。。

=IF(B2="","",ROW())
こちらの式はA2セル入力の後下方向にコピーしてください、Sheet2の会員番号は会員種類に入力があると自動的に表示されます、直接入力はしないでください。
表示形式を00002としたいのであれば、Sheet2のA列とSheet1の会員番号セルをセルの書式設定のユーザー定義で00000としてください。

て入力で000...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報