Excel VBA質問箱 IV

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

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


5349 / 13644 ツリー ←次へ | 前へ→

【51281】データ統合について tetu 07/9/9(日) 22:20 質問[未読]
【51307】Re:データ統合について ハチ 07/9/11(火) 11:02 発言[未読]
【51320】Re:データ統合について tetu 07/9/12(水) 0:44 質問[未読]
【51329】Re:データ統合について ハチ 07/9/12(水) 9:22 回答[未読]
【51377】Re:データ統合について tetu 07/9/14(金) 0:17 お礼[未読]

【51281】データ統合について
質問  tetu  - 07/9/9(日) 22:20 -

引用なし
パスワード
   データSheetと統合Sheetの2つあります。
週1ごとにデータSheetのデータは更新され、その都度データSheet
のデータを統合Sheetに貼り付けていくマクロをくみたいです。

「データSheet」
  A列   B列   C列    D列    E列   F列    G列   H列
1品番/品名 材質   材寸   寸法    員数        1/2   1/3  
2△△△△△ ■■■ ☆☆☆  ○○○
3空白    空白   空白   空白      
4↓     ↓    ↓    ↓         数量    100   120
5                          ロットNo   111   114 
6                          入荷数 
7                          在庫
8                          材料入荷数
9                          在庫
10△△△△△ ■■■ ☆☆☆  ○○○
                     
1.統合Sheetに値が何も無い場合にデータSheetのデータを統合Sheetにそのまま貼り付ける
2.統合Sheetに値がある場合に3.の処理をする
3.データSheetRange(A2)の文字と統合SheetA列のデータのデータがある部分の範囲で
 同じ文字があるか検索していく
4.データSheetA2と同じ値が統合SheetA列にある場合
上の表でいうとデータSheetの行の範囲はA2〜A9、列の範囲はデータのある部分を指定してCopy
統合sheetの同じ値の行、ロットNOの数字のある部分の次のセルの列にActiveして、貼り付ける
5.データSheetA2と同じ値が統合Sheetに無い場合
 上の表でいうとデータSheetのRange("A1:E9")の範囲のみCopyして、統合SheetのA列デー
 タのある1番最終行に移動して貼り付けF以降のデータは、統合SheetのロットNoの数字が
 ある次のセルの列とそのA2の値がある行まで移動して貼る
6.データSheetのA2の次の行に(上の表でいうとA10)移動し1.以降の処理を繰り返す
データSheetA列に値がなくなるまで繰り返す

長々書いてしまってすいませんコードであらわそうとすると余計整理がつかないため
文章でかきました。この小難しい処理をVBAでできるかたよろしくご教授ください。

【51307】Re:データ統合について
発言  ハチ  - 07/9/11(火) 11:02 -

引用なし
パスワード
   ▼tetu さん:
>データSheetと統合Sheetの2つあります。
>週1ごとにデータSheetのデータは更新され、その都度データSheet
>のデータを統合Sheetに貼り付けていくマクロをくみたいです。
>
>「データSheet」
>  A列   B列   C列    D列    E列   F列    G列   H列
>1品番/品名 材質   材寸   寸法    員数        1/2   1/3  
>2△△△△△ ■■■ ☆☆☆  ○○○
>3空白    空白   空白   空白      
>4↓     ↓    ↓    ↓         数量    100   120
>5                          ロットNo   111   114 
>6                          入荷数 
>7                          在庫
>8                          材料入荷数
>9                          在庫
>10△△△△△ ■■■ ☆☆☆  ○○○
>                     
>1.統合Sheetに値が何も無い場合にデータSheetのデータを統合Sheetにそのまま貼り付ける
>2.統合Sheetに値がある場合に3.の処理をする
>3.データSheetRange(A2)の文字と統合SheetA列のデータのデータがある部分の範囲で
> 同じ文字があるか検索していく
>4.データSheetA2と同じ値が統合SheetA列にある場合
>上の表でいうとデータSheetの行の範囲はA2〜A9、列の範囲はデータのある部分を指定してCopy
>統合sheetの同じ値の行、ロットNOの数字のある部分の次のセルの列にActiveして、貼り付ける
>5.データSheetA2と同じ値が統合Sheetに無い場合
> 上の表でいうとデータSheetのRange("A1:E9")の範囲のみCopyして、統合SheetのA列デー
> タのある1番最終行に移動して貼り付けF以降のデータは、統合SheetのロットNoの数字が
> ある次のセルの列とそのA2の値がある行まで移動して貼る
>6.データSheetのA2の次の行に(上の表でいうとA10)移動し1.以降の処理を繰り返す
>データSheetA列に値がなくなるまで繰り返す
>
>長々書いてしまってすいませんコードであらわそうとすると余計整理がつかないため
>文章でかきました。この小難しい処理をVBAでできるかたよろしくご教授ください。


なかなかレスが付かないようですね。
このご質問の中で、
「どこがわからないのか?」がわかりません。

わからない部分を質問してください。

【51320】Re:データ統合について
質問  tetu  - 07/9/12(水) 0:44 -

引用なし
パスワード
   ▼ハチ さん:
>▼tetu さん:
>>データSheetと統合Sheetの2つあります。
>>週1ごとにデータSheetのデータは更新され、その都度データSheet
>>のデータを統合Sheetに貼り付けていくマクロをくみたいです。
>>
>>「データSheet」
>>  A列   B列   C列    D列    E列   F列    G列   H列
>>1品番/品名 材質   材寸   寸法    員数        1/2   1/3  
>>2△△△△△ ■■■ ☆☆☆  ○○○
>>3空白    空白   空白   空白      
>>4↓     ↓    ↓    ↓         数量    100   120
>>5                          ロットNo   111   114 
>>6                          入荷数 
>>7                          在庫
>>8                          材料入荷数
>>9                          在庫
>>10△△△△△ ■■■ ☆☆☆  ○○○
>>                     
>>1.統合Sheetに値が何も無い場合にデータSheetのデータを統合Sheetにそのまま貼り付ける
>>2.統合Sheetに値がある場合に3.の処理をする
>>3.データSheetRange(A2)の文字と統合SheetA列のデータのデータがある部分の範囲で
>> 同じ文字があるか検索していく
>>4.データSheetA2と同じ値が統合SheetA列にある場合
>>上の表でいうとデータSheetの行の範囲はA2〜A9、列の範囲はデータのある部分を指定してCopy
>>統合sheetの同じ値の行、ロットNOの数字のある部分の次のセルの列にActiveして、貼り付ける
>>5.データSheetA2と同じ値が統合Sheetに無い場合
>> 上の表でいうとデータSheetのRange("A1:E9")の範囲のみCopyして、統合SheetのA列デー
>> タのある1番最終行に移動して貼り付けF以降のデータは、統合SheetのロットNoの数字が
>> ある次のセルの列とそのA2の値がある行まで移動して貼る
>>6.データSheetのA2の次の行に(上の表でいうとA10)移動し1.以降の処理を繰り返す
>>データSheetA列に値がなくなるまで繰り返す
>>
>>長々書いてしまってすいませんコードであらわそうとすると余計整理がつかないため
>>文章でかきました。この小難しい処理をVBAでできるかたよろしくご教授ください。
>
>
>なかなかレスが付かないようですね。
>このご質問の中で、
>「どこがわからないのか?」がわかりません。
>
>わからない部分を質問してください。


急ぎご指摘ありがとうございます。
こんなんに難しく書いてしまったので理解に苦しむかなとは、おもいましたが、噛み砕いて
文章にした結果余計混乱させてしまったみたいで、すいません
とりあえず全然途中までのコードをのせて合わせて再度質問させていただきます。

Sub 統合()

Dim Rng As Range
Dim RngAll As Range
Dim Rng2All As Range
Dim VriAns As Variant
Dim I As Long

Set RngAll = Worksheets("データ").Range("A2", Range("A2000").End(xlUp)) '範囲指定
Set Rng2All = Worksheets("統合").Range("A2", Range("A2000").End(xlUp)) '範囲指定


If Sheets("統合").Range("A:A").Value = Nothing Then '統合シートに値が、無い場合データを貼り付け

Sheets("データ").Select
Sheets("データ").Copy
Sheets("統合").Select
Selection.PasteSpecial , Operation:=xlPasteAll
Eles
For Each Rng In RngAll
VriAns = Application.Match(Rng.Value, Rng2All, 0) 'データシートの文字が統合シートにあるか確認
If (VriAns) = True Then
Worksheets("データ").Range(Rng.End(xlDown).Resize(-1, 0), IV1.End(xlLeft)).Select 'ある場合ほしい部分をコピー
Selection.Copy


End Sub
統合Sheetの同じ値の行とロットNOの次の列(空白の部分)にセルをActiveさせ貼り付けたい
のですが,どのようにコードにしたらいいかわからず、先にすすめないです
実際,途中のためここまでの状態も、この構文でいいのも不安ですし
検索が終わった後次のセルを又同じ用に検索させたいのですが、これもわからず
こまっています。大変申し訳ありませんがその点踏まえ再度わかる方おしえてください

【51329】Re:データ統合について
回答  ハチ  - 07/9/12(水) 9:22 -

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

>統合Sheetの同じ値の行とロットNOの次の列(空白の部分)にセルをActiveさせ貼り付けたい
>のですが,どのようにコードにしたらいいかわからず、先にすすめないです
>実際,途中のためここまでの状態も、この構文でいいのも不安ですし
>検索が終わった後次のセルを又同じ用に検索させたいのですが、これもわからず
>こまっています。大変申し訳ありませんがその点踏まえ再度わかる方おしえてください

ForNextのLoopは解っていらっしゃるようですね。
2つの範囲を2重Loopにして1行づつ比較していくことでもできるのでは?

もしくは・・・
この内容であれば、MatchよりFindのほうが使い勝手が良いと思います。
他の掲示板で回答してものが残ってました。参考までに載せときます。
過去ログにもありそうですけど。

Sheet 1枚目のA1,B1にデータを入力し
A1の値で、2枚目A列を検索してあれば上書き、なければ最終行に追加。
Findの引数などは、テキトーです。

Sub Test_KAKIKOMI()
  Dim Tgt_R As Range
  Dim SakiRng As Range
  
  Set Tgt_R = Worksheets(1).Range("A1")
  With Worksheets(2)
    Set SakiRng = .Range("A:A").Find(Tgt_R)
    If SakiRng Is Nothing Then
      MsgBox "該当なしの為、最終行+1をセット"
      Set SakiRng = .Range("A" & Rows.Count).End(xlUp).Offset(1)
    Else
      MsgBox "上書き"
    End If
  End With
  'A1,B1を書き込み
  SakiRng.Resize(, 2).Value = Tgt_R.Resize(, 2).Value

  Set Tgt_R = Nothing
  Set SakiRng = Nothing
End Sub

【51377】Re:データ統合について
お礼  tetu  - 07/9/14(金) 0:17 -

引用なし
パスワード
   ▼ハチ さん:
>▼tetu さん:
>
>>統合Sheetの同じ値の行とロットNOの次の列(空白の部分)にセルをActiveさせ貼り付けたい
>>のですが,どのようにコードにしたらいいかわからず、先にすすめないです
>>実際,途中のためここまでの状態も、この構文でいいのも不安ですし
>>検索が終わった後次のセルを又同じ用に検索させたいのですが、これもわからず
>>こまっています。大変申し訳ありませんがその点踏まえ再度わかる方おしえてください
>
>ForNextのLoopは解っていらっしゃるようですね。
>2つの範囲を2重Loopにして1行づつ比較していくことでもできるのでは?
>
>もしくは・・・
>この内容であれば、MatchよりFindのほうが使い勝手が良いと思います。
>他の掲示板で回答してものが残ってました。参考までに載せときます。
>過去ログにもありそうですけど。
>
>Sheet 1枚目のA1,B1にデータを入力し
>A1の値で、2枚目A列を検索してあれば上書き、なければ最終行に追加。
>Findの引数などは、テキトーです。
>
>Sub Test_KAKIKOMI()
>  Dim Tgt_R As Range
>  Dim SakiRng As Range
>  
>  Set Tgt_R = Worksheets(1).Range("A1")
>  With Worksheets(2)
>    Set SakiRng = .Range("A:A").Find(Tgt_R)
>    If SakiRng Is Nothing Then
>      MsgBox "該当なしの為、最終行+1をセット"
>      Set SakiRng = .Range("A" & Rows.Count).End(xlUp).Offset(1)
>    Else
>      MsgBox "上書き"
>    End If
>  End With
>  'A1,B1を書き込み
>  SakiRng.Resize(, 2).Value = Tgt_R.Resize(, 2).Value
>
>  Set Tgt_R = Nothing
>  Set SakiRng = Nothing
>End Sub


大変為になりましたありがとうございましたMatchより、Findが使いやすいみたいなので
ためしにやってみます

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