Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11628 / 13645 ツリー ←次へ | 前へ→

【14952】『データの突合』( lucky-cat 04/6/11(金) 17:40 質問[未読]
【14964】Re:『データの突合』( ”” 04/6/11(金) 23:09 発言[未読]
【15002】Re:『データの突合』( BB 04/6/13(日) 2:06 回答[未読]
【15003】Re:『データの突合』( lucky-cat-konkon 04/6/13(日) 8:09 発言[未読]
【15005】Re:『データの突合』( BB 04/6/13(日) 10:17 質問[未読]
【15007】Re:『データの突合』( lucky-cat-konkon 04/6/13(日) 11:14 発言[未読]
【15032】Re:『データの突合』( BB 04/6/14(月) 2:04 回答[未読]
【15043】Re:『データの突合』 lucky-cat 04/6/14(月) 12:23 お礼[未読]
【15074】Re:『データの突合』 BB 04/6/15(火) 1:13 回答[未読]
【15077】Re:『データの突合』 lucky-cat 04/6/15(火) 11:17 お礼[未読]
【15088】Re:『データの突合』 lucky-cat 04/6/15(火) 13:21 お礼[未読]

【14952】『データの突合』(
質問  lucky-cat  - 04/6/11(金) 17:40 -

引用なし
パスワード
   はじめて、書き込みます。素人ですみませんが教えてください。

例にあげるとあるシートが3つあるとします。
1つに商品名 価格 産地 作った人の表が
2つ目に作った人 住所  電話番号  FAXの表が
3つ目に作った人  好きな色  性格で
この3つのファイルの作った人をキーにして
別シートに作った人 商品名 住所 電話 性格

を表示させるということは出来るのでしょうか。

変な質問ですみません!

【14964】Re:『データの突合』(
発言  ””  - 04/6/11(金) 23:09 -

引用なし
パスワード
   accessを利用するとか?
vlookup使うとか・・?
それじゃダメでしょうか

【15002】Re:『データの突合』(
回答  BB  - 04/6/13(日) 2:06 -

引用なし
パスワード
   初めまして。こちらに投稿するのは初めてです。私はまだまだ勉強中ですが、このようなプログラムを作った事がありますので、方法をお答えします。

(準備)
1.記入用の別シートを作る。一番上に、マクロを登録する図形を作る。(ユーザーホームを使うより簡単です。)
2.図形の下の列に、必要な項目名を正確に書く。(他のシートの項目と、一致させる。たとえば「作った人」が、「つくった人」になっていると、検索できない。)

(使い方)
1.キーワードを項目の下の行の、空いているセルに記入する。(この場合名前でしょうか。)
2.記入したセルをアクティブにしておく。
3.図形をクリックしてマクロを動かす。

(マクロの内容)
1.アクティブセルの名前を変数に入れる。
2.項目名を別の変数に入れる。(配列を使っても良い。)
3.ループとレンジ変数で各シートの各セルをチェックして、項目名が一致した行にある、 名前が一致した列のセルの内容を別の変数(たとえばv)に入れる。
4.記入用シートの、アクティブセルの列の、項目の行に、vを記入する。
5.これを各項目について行う。
                     以上です。

*日本語で書くと、難しいですね。各シートのレイアウトがある程度わかれば、たぶんコードも書けます。

【15003】Re:『データの突合』(
発言  lucky-cat-konkon  - 04/6/13(日) 8:09 -

引用なし
パスワード
   BBさんお返事ありがとうございます。ごめんなさい市ローとなので
マクロを例を挙げていただけるとありがたいのですが?
忙しいのにすみません!

▼BB さん:
> 初めまして。こちらに投稿するのは初めてです。私はまだまだ勉強中ですが、このようなプログラムを作った事がありますので、方法をお答えします。
>
>(準備)
>1.記入用の別シートを作る。一番上に、マクロを登録する図形を作る。(ユーザーホームを使うより簡単です。)
>2.図形の下の列に、必要な項目名を正確に書く。(他のシートの項目と、一致させる。たとえば「作った人」が、「つくった人」になっていると、検索できない。)
>
>(使い方)
>1.キーワードを項目の下の行の、空いているセルに記入する。(この場合名前でしょうか。)
>2.記入したセルをアクティブにしておく。
>3.図形をクリックしてマクロを動かす。
>
>(マクロの内容)
>1.アクティブセルの名前を変数に入れる。
>2.項目名を別の変数に入れる。(配列を使っても良い。)
>3.ループとレンジ変数で各シートの各セルをチェックして、項目名が一致した行にある、 名前が一致した列のセルの内容を別の変数(たとえばv)に入れる。
>4.記入用シートの、アクティブセルの列の、項目の行に、vを記入する。
>5.これを各項目について行う。
>                     以上です。
>
>*日本語で書くと、難しいですね。各シートのレイアウトがある程度わかれば、たぶんコードも書けます。

【15005】Re:『データの突合』(
質問  BB  - 04/6/13(日) 10:17 -

引用なし
パスワード
   今日は。

 コードを書く場合、必要な情報がいくつか有ります。
1.すでに出来ていれば、検索用各シートの名称。(検索する時指定します。)
2.bookが別なら、その名称
3.各シートの、大体のレイアウト(一般的なら、上の列に項目名を書き、その下に各項目 の内容を記入してありますが、別な形なら、教えてください。)
4.キーワードの項目名(つくった人で、いいですか?)

これらを教えてください。

【15007】Re:『データの突合』(
発言  lucky-cat-konkon  - 04/6/13(日) 11:14 -

引用なし
パスワード
   ▼BB さん:

早々に返事ありがとうございます。
助かります。

> 今日は。
>
> コードを書く場合、必要な情報がいくつか有ります。
>1.すでに出来ていれば、検索用各シートの名称。(検索する時指定します。)
検索シート名は例で
一番シートと二番シートにしておきます。
>2.bookが別なら、その名称
BOOKは別なのでイロハBOOKとホテトBOOKとます。
>3.各シートの、大体のレイアウト(一般的なら、上の列に項目名を書き、その下に各項目 の内容を記入してありますが、別な形なら、教えてください。)
上記でいいです。
>4.キーワードの項目名(つくった人で、いいですか?)
>
はい!!
>これらを教えてください。

すみません!素人で

【15032】Re:『データの突合』(
回答  BB  - 04/6/14(月) 2:04 -

引用なし
パスワード
   ▼lucky-cat-konkon さん:

 今晩は。
イロハBOOKの、一番シートから、3番シートまでを検索し、ホヘトBOOKの、"記入用"というシートに記入するマクロを書きました。注意事項がいくつか有ります。

1.標準モジュールをホヘトBOOKに挿入し、下記コードを記入する。
2.ホヘトBOOKのシートに、"記入用"と名前を付け、A6から、横に、項目名を書いていく。
3.各BOOKの名称、シートの名称は、下記コードに出てくるのと完全に一致させる。(半角、全角に注意!)
4.項目名も、一致させる。出来ない場合は、イロハBOOKの方の項目名の上に、一列挿入して一致した項目名を書く。(たとえば、「氏名」の上のセルに、「つくった人」と書けば、つくった人でその行を特定できる。)
5.記入用シートのつくった人の欄(「つくった人」と書いてあるセルの下のセル)に名称を記入し、そのセルを選択した状態でマクロを動かす。(私は、ボタンのような丸い図形をシートに貼り付け、マクロを登録して、クリックする方法をいつもやっています。)


*私は、WINDOWS2000と、EXCEL97で動作させて、順調に動かせました。私もプロではないので、lucky-cat-konkon さんのシステムでうまくいくかどうかは、やってみなければわかりません。うまくいかない場合は、また連絡してください。


Option Explicit

Dim vv() As Variant

Dim gensi As Object, yousi As Object

Dim s As String

Dim i As Integer, j As Integer, ir As Integer, ic As Integer

Dim r As Range

Dim ws As Worksheet


Sub つくった人()

Set yousi = ThisWorkbook.Worksheets("記入用")
s = ActiveCell.Value

i = MsgBox(s & "さんを検索しますか?", vbYesNo)
If i <> vbYes Then Exit Sub

i = 0

Do While Range("a6").Offset(, i).Value <> ""
  i = i + 1
  ReDim Preserve vv(2, i)
  vv(1, i) = Range("a6").Offset(, i - 1).Value
Loop

Set gensi = Workbooks("イロハBOOK.xls")
gensi.Activate
シート
記入

End Sub


Private Sub シート()

For Each ws In gensi.Worksheets
  If ws.Name = "一番シート" Or ws.Name = "二番シート" Or ws.Name = "三番シート" Then
    ws.Activate
    検索
  End If
Next ws

End Sub

Private Sub 検索()

For Each r In ws.UsedRange
  If r.Value = s Then
    ir = r.Row
    Exit For
  End If
Next r

For j = 1 To i
  For Each r In ws.UsedRange
    If r.Value = vv(1, j) Then
      ic = r.Column
      vv(2, j) = Cells(ir, ic).Value
      Exit For
      MsgBox vv(2, j)
    End If
  Next r
Next j

End Sub


Private Sub 記入()

yousi.Activate

For j = 1 To i
  Cells(ActiveCell.Row, 1).Offset(, j - 1).Value = vv(2, j)
Next j

End Sub

【15043】Re:『データの突合』
お礼  lucky-cat  - 04/6/14(月) 12:23 -

引用なし
パスワード
   BBさんほんとにご協力ありがとうございます。
でも、僕のスキルではうまくいきませんでした。
考え方を根本的にかえます。

BOOKは2つ(アBOOKとイBOOK)
アBOOKにはsheetは1つで項目は横に品名 型番 工場名
イBOOKにはsheetは1つで項目は横に住所 電話番号 品名
とします。

上記の条件で
キーを品名にて
アBOOKのsheet2に
アsheetの品名とイsheetの品名が一致したら
アBOOKのsheet2に品名 住所 工場名を表示する

って感じはできますか?

すみません!

【15074】Re:『データの突合』
回答  BB  - 04/6/15(火) 1:13 -

引用なし
パスワード
   ▼lucky-cat さん:
 今晩は。
コードに書いてあるBOOKとシートの名称は、何に書き換えても、使えます。項目も、シートに必要な項目を書けば、そのまま使えるはずですので、やってみてください。

 ただし、原本と記入用のシート構成だけは、そのままでは対応できません。でも、簡単なので、チャレンジしてみてください。

【15077】Re:『データの突合』
お礼  lucky-cat  - 04/6/15(火) 11:17 -

引用なし
パスワード
   BBさんいつもありがとうございます。
やはりERRがでちゃいます。
具体的に書きます。
ABOOK
BBOOKがあります。
ABOOKにはシートは1個で一覧という名前です。
列には場所、建物、種類
BBOOKにもシートは1個で局名という名前とします
列には場所 場所B 情報という列とします。

両BOOKの場所をキーに一致したら
BBOOKの記入という新シートに
場所 建物  情報を表示するというものです。

BBOOKに記入用シート作成


Option Explicit

Dim vv() As Variant

Dim gensi As Object, yousi As Object

Dim s As String

Dim i As Integer, j As Integer, ir As Integer, ic As Integer

Dim r As Range

Dim ws As Worksheet


Sub 基地()

Set yousi = ThisWorkbook.Worksheets("記入用")
s = ActiveCell.Value

i = MsgBox(s & "一致させます?", vbYesNo)
If i <> vbYes Then Exit Sub

i = 0

Do While Range("a6").Offset(, i).Value <> ""
  i = i + 1
  ReDim Preserve vv(2, i)
  vv(1, i) = Range("a6").Offset(, i - 1).Value
Loop

Set gensi = Workbooks("ABOOK.xls")
gensi.Activate
シート
記入

End Sub


Private Sub シート()

For Each ws In gensi.Worksheets
  If ws.Name = "一覧" Then
    ws.Activate
    検索
  End If
Next ws

End Sub

Private Sub 検索()

For Each r In ws.UsedRange
  If r.Value = s Then
    ir = r.Row
    Exit For
  End If
Next r

For j = 1 To i
  For Each r In ws.UsedRange
    If r.Value = vv(1, j) Then
      ic = r.Column
      vv(2, j) = Cells(ir, ic).Value
      Exit For
      MsgBox vv(2, j)
    End If
  Next r
Next j

End Sub


Private Sub 記入()

yousi.Activate

For j = 1 To i
  Cells(ActiveCell.Row, 1).Offset(, j - 1).Value = vv(2, j)
Next j

End Sub

すみません!用語の意味がわからなくて・・。

【15088】Re:『データの突合』
お礼  lucky-cat  - 04/6/15(火) 13:21 -

引用なし
パスワード
   BBさんの作っていただいたマクロ動きました。
少し勉強になりました。ありがとうございました。
ただ、私の書き方が悪かったのでやりたいことと
違ってました。
名前で検索するっていうより
イロハシートとハニホシートで名前をキーにして
一致したら表示するって言うのを作りたかったです。
でも、すごく勉強になりました。

11628 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free