2つの表を統合したいのですがどなたかお知恵をお貸しください。
(例)
sheet1に古い表、sheet2に新しい表があります。それぞれの表はこんな感じです。
(sheet1)
  A    B    C    D
sony001 男  東京 Japan
sony002 女  埼玉 Japan
sony003 女  千葉 U S A
sony005 男  大阪 Canada
sony007 女  東京 Russia

(sheet2)

  A    B   C   D
sony001 男  東京 Japan
sony002 女  埼玉 Japan
sony002 女  千葉 U S A
sony004 男  大阪 Canada
sony005 女  東京 Russia
sony006 女  東京 Russia
sony007 男  東京 U S A
sony007 女  東京 Russia

これらの表をsheet3にどのように統合したいかといいますと、下記のようは統合表を作成したいのです。

(sheet3 統合表)
  A    B    C   D
sony001 男  東京 Japan
sony002 女  埼玉 Japan
sony002 女  千葉 U S A
sony003 女  千葉 U S A
sony005 女  東京 Russia
sony007 男  東京 U S A
sony007 女  東京 Russia

質問の長さが800字を超えてしまいますので、この統合表を作成するための手順を「2つの表を統合するVBAマクロについて(2)」で補足したいと思いますのでどうぞよろしくお願いいたします。

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

A 回答 (3件)

別のご質問で関数の事に触れたので一例として、こういう場合にはこの関数で出来ます


という意味で回答したものであって実際に使用する事を薦めている訳ではありません。
5000~10000件もあるようなデータを自動計算する設定のまま件数分のセルに数式をいれると
処理が遅くて使い物にならないと思います。

それにnishi6さんの考えてくださったVBAがあるのですから必要ないはずです。

■件数が少なくて何かに利用したい方の為に
商品番号などをつける場合は別々のセルするか「0001みかん」という風に数字を左に付ける。
番号を付けたセルをキーに「データ」-「並べ替え」で並べ替えを行う事が出来ます。
(文字列の左側のものを優先的にする為「みかん0001」「おかん0002」で並べ替えを
行うと「おかん0002」「みかん0001」に。)

50音順、数字などの昇順、降順でもなく任意の順に並べ替えたい場合は1番目に並べたい行の
セルに「1」2番目「2」・・・という風に番号をつけ、そのセルをキーに「並べ替え」
をする。
50音順で並び替えたけど最初の並びに戻したい場合、番号がふってないと戻す為のキーが
ないので戻らない。
だから、並べ替える前にデータの右でも左のセルでもいいので番号ふっておく。
手動では大変なのでフィルを使って番号を自動で付ける(フィルが分からなければヘルプ参照)

☆今回のを例にすると
K列にフィルを使って番号をつけ、F~I列でしたのと同様に
シート1のJ1は=IF($E1=0,K1,"") シート2のJ1は=IF($E2<>0,K1,"")にして不要な番号がセルに
入らないする。
E1をクリックしてシフト+コントロールキーを押しながら「end」キーで選択してコピーして
シート3に「形式を選択して・・」-「値」で貼り付けし「データ」-「並び替え」で「J列」を
キーにして並べ替える。
(F~J列を選択してコピーして値をシート3に張り付けて並べ替えをするとデータが空白で番号
だけが表示された行が入ってしまう)
    • good
    • 0
この回答へのお礼

april21さん、お忙しい中ご回答本当にありがとうございます。やはり、データが多い場合はマクロなどの自動処理の方が時間が短縮できるのですね。おっしゃるとおりnishi6さんのVBAのお世話になっているのでどうしてもというわけではなかったのですが、私にとってBVAより比較的ハードルが低いかなと思われる関数でも同じことが出来るのであれば、何かのときに自分たちの力でどうにか処理することが出来ることがあるかもしれないと、ご迷惑も考えずにご相談してしまいまいた。本当に申し訳ありませんでした。A列には何の秩序もなくリストアップされている表もあるので、april21さんが最後のところでご指導してくださったやり方で一度試してみたいと思います。本当にいつもありがとうございます。今回もお手数をおかけして恐縮ですがどうぞこれからもよろしくお願いします。

お礼日時:2001/05/16 23:28

>データが多い場合はマクロなどの自動処理の方が時間が短縮できるのですね。


表計算では自動計算をしてしまうため操作する度に10000件分の処理をしてしまう
為、重くなってしまいます。
(自動計算させない設定にしておいてデータを処理する時だけ実行する方法もあります)

マクロだと実行させる処理(ボタンを押すとか特定のイベントを起こした時)を
した時しか動作してない。
それと繰り返し実行するフロー制御ステートメントがVBAにあるのでコードを
簡略化することが出来るので軽くなります。

今回を例にVBAにするなら
1~10000件のデータに対して同じ処理を繰り返して実行しているだけなので
今回使った関数をVBAの関数にして繰り返し実行するステートメン(For...Nextなど)を使って実行すれば良いだけですね。

(^^)/~~~
    • good
    • 0

■シート1の


E1=COUNTIF(Sheet2!A$1:A$8,A1)
で、このセルをクリックして右下が「+」に変わったらI1までドラッグ&ドロップ、
次にI5のセルまでドラッグ&ドロップ

F1=IF($E1=0,A1,"")
で、このをクリックして右下が「+」に変わったらF5までドラッグ&ドロップ

■シート2
E1=COUNTIF(Sheet1!A$1:A$8,A1)・・・・・Sheet2がSheet1に変わっただけ

F1=IF($E1<>0,A1,"")・・・・・「=」だったのが「<>」に変わっただけ

↑と同じような感じで数式入力(5行から8行に増えたのでその分多めにトラッグ&ドロップ)

これでシート1とシート2が必要なデータがF列~I列に残ってるはずです。

シート3に各シートのデータを「形式を選択して貼り付け」-「値」で貼り付け、
空白行はオートフィルタで「空白以外のセル」選択すれば消えます。

並び方を変えたくないのであればシート1,2のデータにフィルで番号を付けておき、それをキー
に「並べ替え」。
(I1までだったのをこのセルの分まで増やさないと無視するデータに番号がついたままになります)
番号を付けると元データにキーになる数字などがなくても大丈夫です。

無視されたデータなどはシート2を見ればわかると思いますので省きました。
    • good
    • 0
この回答へのお礼

april21さん、いつもご回答ありがとうございます。早速やってみました。素晴らしいですね。見事sheet1,sheet2のE列、F列に、sheet3で統合したいデータが残りました。これをsheet3に統合する際に、上記の質問では分かりづらいのですが、A列のデータの並びを変えずに統合したいのです。これは何をやっているのかといいますと、データの更新なのです。sheet1にはお客様から送られてくる品番(A列)とそれに対するデータ(B,C,D列)があります。Sheet2にはその品番に対して私どもの会社で行った最新のテスト結果データ(B,C,D列)があります。(もちろんA列は共通です。)sheet1のA列には重複はありません。しかしsheet2の私達の方の表は、テストの結果によってはA列の1つの項目に対して2~3行の結果データになる場合もあるのです。
(例)
sheet1
みかん001   男   東京  USA  ←april21さんの関数で残るデータ
 みかん002   女   大阪  JAP
 みかん003   男   埼玉  CAN
 みかん004   女   福岡  SDD
 みかん005   男   秋田  TTA  ←april21さんの関数で残るデータ 
 みかん007   女   千葉  YER

sheet2
みかん002   男   東京  USA  ←april21さんの関数で残るデータ
 みかん002   女   福岡  TTA  ←april21さんの関数で残るデータ
 みかん003   女   秋田  CAN  ←april21さんの関数で残るデータ
 みかん004   男   埼玉  DAA  ←april21さんの関数で残るデータ
 みかん006   女   千葉  YER  ←無視されるデータ
 みかん007   男   東京  USA  ←april21さんの関数で残るデータ

sheet3
 みかん001   男   東京  USA  ←sheet1のデータ
 みかん002   男   東京  USA  ←sheet2のデータ
 みかん002   女   福岡  TTA  ←sheet2のデータ
 みかん003   女   秋田  CAN  ←sheet2のデータ
 みかん004   男   埼玉  DAA  ←sheet2のデータ
みかん005   男   秋田  TTA  ←sheet1のデータ
 みかん007   男   東京  USA  ←sheet2のデータ

という風にしたい場合、april21さんがご提案下さったSheet1,2に残ったデータを空白を無視してSheet3にコピーすると
 みかん001   男   東京  USA  ←sheet1のデータ
 みかん005   男   秋田  TTA  ←sheet1のデータ
 みかん002   男   東京  USA  ←sheet2のデータ
 みかん002   女   福岡  TTA  ←sheet2のデータ
 みかん003   女   秋田  CAN  ←sheet2のデータ
 みかん004   男   埼玉  DAA  ←sheet2のデータ
 みかん007   男   東京  USA  ←sheet2のデータ
というふうになりA列の並びが変わってしまうと思われます。(みかん001の後にみかん005が来てしまうので…)このA列の並びはsheet1の並びを基準にしたいのです。これを今までは手動で見合わせながらcut & Paste をしていましたが、データの数が5000件から10000件にも及ぶといつも午前様になってしまうというわけです。april21さんの関数では見事にそれぞれのsheetにsheet3で採用したいデータが残っていますので、後はこれをsheet1のA列の並びを基準に統合できれば完璧なのですが、何かいい方法はございますでしょうか?説明が長くなってしまって(しかもややこしくて)大変申し訳ありませんが,いいアイデアが思い浮かんだ時にはご指導下さいませ。どうぞよろしくお願いします。今回は素晴らしい関数をお教え下さり本当に勉強になりました。ありがとうございます。
 
 

お礼日時:2001/05/16 10:29

このQ&Aに関連する人気のQ&A

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

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

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

QLatex 表の書き方について

Latexで表を作成していて、2行にわたる項目を作成しその項目名を上下の中央に配置したいのですが、中央揃えする方法が分かりません。
どなたか教えてください。

Aベストアンサー

http://www.biwako.shiga-u.ac.jp/sensei/kumazawa/tex/table.html
に紹介されている parboxを使う方法が使えるかもしれません。

QExcel でシート間の重複データ(Sheet1のA=Sheet2のA かつ Sheet1のB=Sheet2のB)

Excel2000です。

Sheet1のA列・B列・C列・・・にデータが入っています。
Sheet2のA列・B列・C列・・・にデータが入っています。

Sheet1のA列とSheet2のA列は、似たようなデータが入っています。
Sheet1のB列とSheet2のB列も、同様です。
C列以降のデータは、シート間で全然関係ありません。

Sheet1の行データ(A列・B列)が、Sheet2(A列・B列)にも存在しているかどうか、
を知るには、どうすればよいですか。
C列以降の列のデータは、比較する際に使いません。

つまり、
Sheet1のA = Sheet2のA
かつ
Sheet1のB = Sheet2のB
であるような行を知りたいのですが、

どうすればよいのでしょうか。

Aベストアンサー

Sheet1、Sheet2 ともに空いている列に =A1&B1 のような連結データを作り、Matchなどで比較するとか、、、

Sheet1 の E1 =A1&B1
Sheet2 の E1 =A1&B1
Sheet1 の F1 =MATCH(E1,Sheet2!E:E,0)

QLaTeXで,罫線ありの表の中で下付きの数字(添え字)を使いたいのですが・・・

LaTeXでレポートを作成しているのですが,罫線ありの表の中で下付きの数字(添え字)を使う方法がわからなくて困っています.

罫線ありの表の作り方や下付き数字の作り方それぞれ単体では作れるのですが,どうしても表の中で下付き数字が作れません.

どなたかご教授お願いします.

Aベストアンサー

$で囲んで数式モードにしても駄目ですか?

$ y = x_{0} + x_{1} + x_{2} $

QExcel2013 VBA sheet1とsheet2のデータを合成してsheet3を作るには

sheet1に氏名、sheet2にその氏名の人の趣味が入っています。

新たにsheet3を作成して、
氏名1
趣味
氏名1

氏名2
趣味
氏名2

氏名3
趣味
氏名3

氏名4
趣味
氏名4

としたいです。
VBAのコードを教えて下さい。

例えば
①sheet1には
A1;1 B1;阿部 C1;あべ
A2;2 B2;佐藤 C2;さとう
A3;3 B3;山名 C3;やまな
A4;4 B4;山本 C4;やまもと

②sheet2にはその人の趣味が入っています。

A1;1  B1;釣り C1;つり
A2;空白 B2;踊り C2;おどり
A3;空白 B3;歌 C3;うた

A4;2  B4;読書 C4;どくしょ
A5;空白 B5;野球 C5;やきゅう


A6;3 B6;映画鑑賞 C6;えいがかんしょう

A7;4  B7;釣り C7;つり
A8;空白 B8;踊り C8;おどり
A9;空白 B9;歌 C9;うた

③sheet3を新に作成して

A1;1 B1;阿部 C1;あべ
A2;空白  B2;釣り C2;つり
A3;空白 B3;踊り C3;おどり
A4;空白 B4;歌 C4;うた
A5;空白 B5;阿部 C5;あべ

A6;2 B6;佐藤 C6;さとう
A7;空白 B7;読書 C7;どくしょ
A8;空白 B8;野球 C8;やきゅう
A9;空白 B9;佐藤 C9;さとう

A10;3 B10;山名 C10;やまな
A11;空白 B11;映画鑑賞 C11;えいがかんしょう
A12;空白 B12;山名 C12;やまな

A13;4 B13;山本 C13;やまもと
A14;空白  B14;釣り C14;つり
A15;空白 B15;踊り C15;おどり
A16;空白 B16;歌 C16;うた
A17;空白 B17;山本 C17;やまもと



のようにしたいです。

実際、データは、sheet1は419列、sheet2は2563列あります。

sheet1に氏名、sheet2にその氏名の人の趣味が入っています。

新たにsheet3を作成して、
氏名1
趣味
氏名1

氏名2
趣味
氏名2

氏名3
趣味
氏名3

氏名4
趣味
氏名4

としたいです。
VBAのコードを教えて下さい。

例えば
①sheet1には
A1;1 B1;阿部 C1;あべ
A2;2 B2;佐藤 C2;さとう
A3;3 B3;山名 C3;やまな
A4;4 B4;山本 C4;やまもと

②sheet2にはその人の趣味が入っています。

A1;1  B1;釣り C1;つり
A2;空白 B2;踊り C2;おどり
A3;空白 B3;歌 ...続きを読む

Aベストアンサー

こんばんは!

Sheet3にSheet1のデータを二度表示させるのがイマイチ理解できませんが、
ご質問通りにやってみました。

Sub Sample1()
Dim i As Long, lastRow As Long, myCnt As Long
Dim c As Range, wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
Application.ScreenUpdating = False
wS2.Rows(1).Insert
wS2.Range("D:D").Insert
With Worksheets("Sheet3")
.Cells.ClearContents
lastRow = wS2.Cells(Rows.Count, "B").End(xlUp).Row
Range(wS2.Cells(2, "D"), wS2.Cells(lastRow, "D")).Formula = "=IF(A2="""",D1,A2)"
For i = 1 To wS1.Cells(Rows.Count, "A").End(xlUp).Row
With .Cells(Rows.Count, "B").End(xlUp).Offset(1)
.Value = wS1.Cells(i, "B")
.Offset(, -1) = wS1.Cells(i, "A")
.Offset(, 1) = wS1.Cells(i, "C")
End With
Set c = wS2.Range("A:A").Find(what:=wS1.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
myCnt = WorksheetFunction.CountIf(wS2.Range("D:D"), wS1.Cells(i, "A"))
.Cells(Rows.Count, "B").End(xlUp).Offset(1).Resize(myCnt, 2).Value = _
c.Offset(, 1).Resize(myCnt, 2).Value
End If
'▼
.Cells(Rows.Count, "B").End(xlUp).Offset(1).Resize(, 2).Value = _
wS1.Cells(i, "B").Resize(, 2).Value
'▲
Next i
.Rows(1).Delete
wS2.Rows(1).Delete
wS2.Range("D:D").Delete
Application.ScreenUpdating = True
.Activate
End With
MsgBox "完了"
End Sub

※ コード内の▼から▲までがもう一度Sheet1のデータを表示させているコードです。
細かい検証はしていませんが、
こんな感じではどうでしょうか?m(_ _)m

こんばんは!

Sheet3にSheet1のデータを二度表示させるのがイマイチ理解できませんが、
ご質問通りにやってみました。

Sub Sample1()
Dim i As Long, lastRow As Long, myCnt As Long
Dim c As Range, wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
Application.ScreenUpdating = False
wS2.Rows(1).Insert
wS2.Range("D:D").Insert
With Worksheets("Sheet3")
.Cells.ClearContents
lastRow = ...続きを読む

QLATEXにて表番号の後に改行をするには

LATEXで、表番号の後に改行を入れるにはどうしたら良いでしょうか?
現在、プリアンブルで
¥makeatletter
¥newcommand{¥figcaption}[1]{¥def¥@captype{figure}¥caption{#1}}
¥newcommand{¥tblcaption}[1]{¥def¥@captype{table}¥caption{#1}}
¥makeatother
でfigcaptionとtblcaptionを定義して使っています。

TABLE 1
キャプションの文

という風に、表番号の後に改行を入れて出力させたいのですが、どのように設定すればいいですか?
添付データのような形で出力したいです。

Aベストアンサー

Table I(Tableは大文字でフォント不明)となっているので、どのような文書クラス(article.clsなど)を使われているのか分からないのですが、
\usepackage{ccaption}
を入れ、キャプションの所に
\captiondelim{}
\captionstyle{\\}
\setlength{\belowcaptionskip}{10pt}
を入れれば上手く行くかと思います。

Qsheet1(1月)からsheet12(12月)をsheet13(H17年度)に集計したい

sheet1(1月)
A   B  C
1 得意先  銀行  金額
2 aa社 xx 50
3 cc店 yy 30
4 ee社 xx 20

sheet2(2月)
  A B C
1 bb zz 50
2 ee xx 30
3 cc yy 50
4 dd ww 30

目的のsheet
sheet13(H17年度)
A     B    C    D
1 得意先  1月   2月   3月
2 aa社   50  
3 bb社 50
4 cc社 30 50
5 dd社 30
6 ee社 20 30

Aベストアンサー

元ファイルをシート分けせずに、月フィールドを作って整理し
ピポットテーブルを使えば一発です。

得意先銀行金額月
aaxx501月
ccyy301月
eexx201月
bbzz502月
eexx302月
ccyy502月
ddww302月

としておき、ピポットテーブルで
行:得意先、列:月、データ:合計/金額とすればよいでしょう

QLATEXで表に関することです。

今LATEXを使ってレポートを書いているのですが、ちょっとつまずいています。

あるデータを表にまとめる作業をしているのですが、セルに対角線を引くことがどうしても出来ません。つまり□(セル)の中に/(対角線)を引きたいのですが、どうやったらいいのか分からないのです。ガイドブックなどをいろいろと見ているのですが、まったく方法が載っていません。不可能なのでしょうか?さらに一つの□(セル)の中に A/(対角線)Bという感じで入力したいのですが、このようなことは可能でしょうか。

分かりにくい説明で申し訳ありませんが、分かる方はどうかご教授ください。お願いします。

Aベストアンサー

直接の回答ではないのですが,以下の本に掲載されていたかと思います。
参考にしてみてください。


参考図書:(LaTeX スタイル・マクロ ポケットリファレンス、技術評論社)


追記:現在、直接は使用していないのですが,昔私も論文作成に使って
いたことからなつかしくなり、思わず連絡した次第です。
すぐに対応できるかわかりませんがご参考までに。

参考URL:http://www.nsknet.or.jp/~tony/TeX/pocket.html

QEXCELでSheet2にある名前がSheet1のどこにあるのかすぐ分かる方法

EXCELでSheet2に馬の名前があります。
例えば、クイーンズルビー
Sheet1にも同じ名前がある場合
どこにあるのかSheet2のクイーンズルビー
という名前をクリックして
Sheet1のクイーンズルビーのある所にすぐ移動する方法はありますでしょうか?Sheet1のどこかにあるのは分かっているのですが、どこにあるのかは分かりません。今の所ctrl+fで入力して探しています。列の位置はCと分かっているのですが、行がどこか分からない状態です。
バージョンはEXCEL2000です。
よろしくお願いします。

Aベストアンサー

ファイル名が「Book1.xls」とします。
「Sheet2」のA3セルに「クイーンズルビー」が入力されているとします。
B3セルに「=HYPERLINK("[Book1.xls]Sheet1!$C$"&MATCH(A3,Sheet1!C:C,0),A3)」を入力します。
B3セルをクリックする事により、移動します。

Qテキスト幅にあわせた表の作り方(latex 2カラム)

皆様

  こんにちは、ご教授をお願い致したいと思います。

 latexで2カラムの文書を書いています。テキスト幅(つまりカラムの幅)
に同幅の表を作りたいが、何かよい方法があれば教えてください。

\begin{table}[htbp]
\caption {Test Table}
\small
\begin{tabular*}{8cm}{@{\extracolsep{\fill}}|l|l|l|l|} \hline
Category & Characteristics & Maneuver(s) & Quadrant(s) \\ \hline
\end{tabular*}
\end{table}

これでは、幅を8cmに指定しているにも関わらず、はみ出して隣のカラムに
行ってしまいました。

1、カラム幅を表幅に継承させるにはどうすれば?
2、はみ出ないように、適当に改行するには?
3、表の第一行の文字サイズは普通サイズ、第二行以後はやや小さい
  文字サイズを指定するには?

 どなかたサンプルを示していただければと思います。

皆様

  こんにちは、ご教授をお願い致したいと思います。

 latexで2カラムの文書を書いています。テキスト幅(つまりカラムの幅)
に同幅の表を作りたいが、何かよい方法があれば教えてください。

\begin{table}[htbp]
\caption {Test Table}
\small
\begin{tabular*}{8cm}{@{\extracolsep{\fill}}|l|l|l|l|} \hline
Category & Characteristics & Maneuver(s) & Quadrant(s) \\ \hline
\end{tabular*}
\end{table}

これでは、幅を8cmに指定しているにも関わらず、はみ出して隣のカラムに
...続きを読む

Aベストアンサー

1. 8cm ではなくて、\columnwidth にします。
2. \parboxを使うのが楽だと思います。
http://www.biwako.shiga-u.ac.jp/sensei/kumazawa/tex/table.html
の下のほう
3.それは\smallのせいでは?

QEXCEL sheet1 と sheet2 を使った精査

sheet1のA列には○か空白がついており、
sheet1のB列には人の名前がついてます。
現在sheet2のA列は全て空白で
sheet2のB列には人の名前が入っております。

例えば
sheet1では   ○  田中
となっていて、
sheet2では  空白  田中
となっております。

sheet2に、
sheet1にて○がついていて、B列に同じ名前が入ってるものを
sheet2のA列に○がつけたいのですが、

どのようにすればよろしいでしょうか?

説明が下手ですいません・・・

sheet2のA列に
sheet1のA列と同じように○をつけたいのです。

B列のほうがファイル数が若干多い為、
単純にシートのコピーじゃ無理な状態です。

よろしくお願いします。

Aベストアンサー

Sheet2のA1セルに以下の式を入力して下方向にオートフィルします。

=IF(COUNTIF(Sheet1!B:B,B1)=0,"",INDEX(Sheet1!A:A,MATCH(B1,Sheet1!B:B,0)))


人気Q&Aランキング

おすすめ情報