Excel VBA質問箱 IV

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

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


2743 / 13646 ツリー ←次へ | 前へ→

【66198】複数のシートの統合について kamaboko 10/8/8(日) 15:57 質問[未読]
【66199】Re:複数のシートの統合について かみちゃん 10/8/8(日) 16:40 発言[未読]
【66200】Re:複数のシートの統合について kamaboko 10/8/8(日) 17:27 お礼[未読]
【66201】Re:複数のシートの統合について かみちゃん 10/8/8(日) 20:07 発言[未読]
【66202】Re:複数のシートの統合について kamaboko 10/8/8(日) 21:29 質問[未読]
【66203】Re:複数のシートの統合について kamaboko 10/8/8(日) 21:49 発言[未読]
【66204】Re:複数のシートの統合について かみちゃん 10/8/8(日) 22:11 発言[未読]
【66207】Re:複数のシートの統合について kamaboko 10/8/8(日) 23:24 お礼[未読]
【66205】Re:複数のシートの統合について kamaboko 10/8/8(日) 22:34 お礼[未読]
【66206】Re:複数のシートの統合について かみちゃん 10/8/8(日) 22:54 発言[未読]
【66209】Re:複数のシートの統合について kamaboko 10/8/9(月) 19:49 質問[未読]
【66210】Re:複数のシートの統合について かみちゃん 10/8/9(月) 20:06 発言[未読]
【66211】Re:複数のシートの統合について kamaboko 10/8/10(火) 8:22 発言[未読]
【66212】Re:複数のシートの統合について かみちゃん 10/8/10(火) 8:52 発言[未読]
【66214】Re:複数のシートの統合について kamabako 10/8/10(火) 13:19 発言[未読]
【66216】Re:複数のシートの統合について かみちゃん 10/8/10(火) 13:48 発言[未読]
【66220】Re:複数のシートの統合について kamabako 10/8/10(火) 15:01 発言[未読]
【66221】Re:複数のシートの統合について かみちゃん 10/8/10(火) 15:20 発言[未読]
【66227】Re:複数のシートの統合について kamaboko 10/8/11(水) 1:47 発言[未読]
【66228】Re:複数のシートの統合について かみちゃん 10/8/11(水) 5:58 発言[未読]
【66230】Re:複数のシートの統合について kamaboko 10/8/11(水) 8:18 発言[未読]
【66231】Re:複数のシートの統合について かみちゃん 10/8/11(水) 8:29 発言[未読]
【66241】Re:複数のシートの統合について kamaboko 10/8/11(水) 19:08 発言[未読]
【66242】Re:複数のシートの統合について かみちゃん 10/8/11(水) 19:13 発言[未読]
【66245】Re:複数のシートの統合について kamaboko 10/8/11(水) 22:40 発言[未読]
【66251】Re:複数のシートの統合について かみちゃん 10/8/12(木) 14:17 発言[未読]
【66261】Re:複数のシートの統合について kamaboko 10/8/13(金) 2:05 発言[未読]
【66262】Re:複数のシートの統合について かみちゃん 10/8/13(金) 5:38 発言[未読]
【66263】Re:複数のシートの統合について kamabako 10/8/13(金) 10:03 発言[未読]
【66264】Re:複数のシートの統合について kamabako 10/8/13(金) 10:15 発言[未読]
【66265】Re:複数のシートの統合について かみちゃん 10/8/13(金) 10:26 発言[未読]
【66266】Re:複数のシートの統合について kamabako 10/8/13(金) 11:36 発言[未読]
【66267】Re:複数のシートの統合について かみちゃん 10/8/13(金) 13:11 発言[未読]
【66268】Re:複数のシートの統合について kamaboko 10/8/14(土) 0:01 お礼[未読]

【66198】複数のシートの統合について
質問  kamaboko  - 10/8/8(日) 15:57 -

引用なし
パスワード
   初めてVBAを作っている超初心者です。
また、初めて質問させていただきます。

本を購入してコードの丸写しから始めて勉強しているところです。
ネット情報も参考にして、エラーを何度も処理し、マクロが実行出来るようになったところですが・・・。
載っていたサンプルの丸写しからは応用できないことが分かり、白紙に戻ってしまい、行き詰ってしまいました。
どなたか教えてください。

支店毎のシート(15枚)を1枚の全データシートにまとめたい。

シート内容

C列  |D列  |E列 |F列 |G列
ナンバー|品名  |金額 |日付 |備考
1   |コップ |1000 |4/1  |追加分 
2   |プレート|5000 |4/10 |
3   |ブラシ |3000 |5/15 |新規


シート札幌 シート仙台 シート新潟 シート千葉・・・シート全データ
があります。
支店毎のシートにはフィールド列(A、B)および行(1〜3)がありますが、
書式、項目はすべて同一です。
全データシートには項目とデータのみ記載される。

やりたい作業は、
・支店のどこかのシートに新たな1行が加わると全データシートの最終行にも転記されるようにする。
・全データシートには単純にデータが入力順に追記され、並び替えや抽出はない。
→全データシートは最終行に新たに入力された行が追加されていき、
 イメージ的には上から下へ帯状になる。

全データシート完成予定
ナンバー|品名  |金額 |日付 |備考
1   |コップ |1000 |4/1  |追加分 
2   |プレート|5000 |4/10 |
3   |ブラシ |3000 |5/15 |新規
1   |グラス |800  |4/3  | 
2   |カバー |20000 |4/20 |
3   |ブラシ |5000 |6/7  |確認済
4   |コップ |1000 |4/1  |追加分





また、
・シートによっては、データの無いシートもあり、後にデータが入力される可能性がある。
・各支店シートのデータは30行まで。30行を超えると、2枚目のシートが作成される。

私が、試してみたマクロは、

Sub 支店別シート統合()
Dim シート名 As Variant
Dim 開始セル As String
Dim i As Long
から始まり、
各シート名の代入、
統合シートの用意、
フィールド名のコピー、
支店別シートのデータコピー
End Sub

です。
しかし、これは各シートを一度に全データがコピーされ、1行づつ更新されるように応用させることができませんでした。
そもそもVBAは初めてなので、エクセル関数ですむのであれば、関数を教えていただきたいです。
データツールの統合では私にはできませんでした。

うまくまとめられず、長い内容ですみません。
VBAのコード、もしくはエクセルの関数を教えてください。
よろしくお願いします。

【66199】Re:複数のシートの統合について
発言  かみちゃん E-MAIL  - 10/8/8(日) 16:40 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>私が、試してみたマクロは、

まず、試したみたマクロのコードを差し支えない程度に全文提示してみてください。

私は、それをベースに、こうしたらいいのでは?という観点で
私でよければ、時間がある限りコメントさせていただこうと思います。

【66200】Re:複数のシートの統合について
お礼  kamaboko  - 10/8/8(日) 17:27 -

引用なし
パスワード
   ▼かみちゃん さん:

かみちゃん様(=私には本当に、神様です)
本当にありがとうございます。
路頭に迷った状態でしたので、救われた気持でいます。
まだ、答えが出ていませんが(:^^)

実は、会社で暇な時間があっても、この作業のコードを本やネットで調べていると、
「自分のスキルアップのためだ」という理由で怒られるので、自宅でしか調べることができず、相談する人もいなかったもので。


Option Base 1

Sub 支店別シート統合()
Dim シート名 As Variant
Dim 開始セル As String
Dim i As Long

シート名 = Array("札幌", "仙台", "新潟", "中央", "品川", "新宿", "世田谷", "港", "さいたま", "千葉", "横浜", "静岡", "名古屋", "京都", "大阪")

Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.name = "一覧"

Sheets(シート名(1)).Activate
ActiveCell.CurrentRegion.Select
開始セル = ActiveCell.Address

Selection.Resize(1).Copy
Sheets("一覧").Range("A1").PasteSpecial xlPasteColumnWidths
Sheets("一覧").Range("A1").PasteSpecial

For i = 1 To 15
  Sheets(シート名(i)).Activate
  Range(開始セル).CurrentRegion.Select
  Selection.Offset(1).Resize(Selection.Rows.Count - 1).Select
  Selection.Copy Sheets("一覧").Cells(Rows.Count, 1).End(xlUp).Offset(1)
Next i
 

Sheets("一覧").Activate
 
End Sub

これでは以下の点で応用できませんでした。
・一行づつ追加されない
・空欄セルがあるとエラーになる

やりたいことと、全体的に的はずれなものとなっているかもしれません。
よろしくお願いします。

【66201】Re:複数のシートの統合について
発言  かみちゃん E-MAIL  - 10/8/8(日) 20:07 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>これでは以下の点で応用できませんでした。
>・一行づつ追加されない
>・空欄セルがあるとエラーになる

質問を読み違えていました。

入力後に以下のコードを実行すると、
その時点のアクティブシートのC列の値が入っている最終行のC列〜G列をコピーして
「一覧」シートのA列の値が入っている最終行の次の行に貼り付けします。
したいことはそういうことではないのでしょうか?

Sub 転記()
 Cells(Rows.Count, "C").End(xlUp).Resize(, 5).Copy _
  Sheets("一覧").Cells(Rows.Count, 1).End(xlUp).Offset(1)
End Sub

【66202】Re:複数のシートの統合について
質問  kamaboko  - 10/8/8(日) 21:29 -

引用なし
パスワード
   ▼かみちゃん さん:
返信ありがとうございます。

>入力後に以下のコードを実行すると、
>その時点のアクティブシートのC列の値が入っている最終行のC列〜G列をコピーして
>「一覧」シートのA列の値が入っている最終行の次の行に貼り付けします。
>したいことはそういうことではないのでしょうか?

↑おっしゃる通りです。

>Sub 転記()
> Cells(Rows.Count, "C").End(xlUp).Resize(, 5).Copy _
>  Sheets("一覧").Cells(Rows.Count, 1).End(xlUp).Offset(1)
>End Sub
早速、上記の教えていただいたコードを入力したのですが、
★の行がエラーになりました。
また、修正方法は下段に張り付けるだけでよかったのでしょうか。
本当に初歩的な質問ですみません。
またよろしくお願いします。

Option Base 1

Sub 支店別シート統合()
Dim シート名 As Variant
Dim 開始セル As String
Dim i As Long

シート名 = Array("札幌", "仙台", "新潟", "中央", "品川", "新宿", "世田谷", "港", "さいたま", "千葉", "横浜", "静岡", "名古屋", "京都", "大阪")

Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.name = "一覧"

Sheets(シート名(1)).Activate
ActiveCell.CurrentRegion.Select
開始セル = ActiveCell.Address

Selection.Resize(1).Copy
Sheets("一覧").Range("A1").PasteSpecial xlPasteColumnWidths
Sheets("一覧").Range("A1").PasteSpecial

For i = 1 To 15
  Sheets(シート名(i)).Activate
  Range(開始セル).CurrentRegion.Select
 ↓下記の★の行がエラーになりました。
★Selection.Offset(1).Resize(Selection.Rows.Count - 1).Select
  Selection.Copy Sheets("一覧").Cells(Rows.Count, 1).End(xlUp).Offset(1)
Next i
 

Sheets("一覧").Activate
 
End Sub

Sub 転記()
 Cells(Rows.Count, "C").End(xlUp).Resize(, 5).Copy _
  Sheets("一覧").Cells(Rows.Count, 1).End(xlUp).Offset(1)
End Sub

【66203】Re:複数のシートの統合について
発言  kamaboko  - 10/8/8(日) 21:49 -

引用なし
パスワード
   ▼かみちゃん さん:
何度もすみません。
念のため補足させていただきます。
すでに、ご理解いただいているかと思いますが、

>空欄セルがあるとエラーになる。

と書きましたが、正確には
・データのないシートがあると★行がエラーになる。
・空白行があると、空白行以下のデータは一覧シートに記載されない。
でした。

よろしくお願いいたします。

【66204】Re:複数のシートの統合について
発言  かみちゃん E-MAIL  - 10/8/8(日) 22:11 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>入力後に以下のコードを実行すると、
>>その時点のアクティブシートのC列の値が入っている最終行のC列〜G列をコピーして
>>「一覧」シートのA列の値が入っている最終行の次の行に貼り付けします。
>>したいことはそういうことではないのでしょうか?
>
>↑おっしゃる通りです。

であれば、
Sub 転記()
 Cells(Rows.Count, "C").End(xlUp).Resize(, 5).Copy _
  Sheets("一覧").Cells(Rows.Count, 1).End(xlUp).Offset(1)
End Sub

だけです。

Sub 支店別シート統合()

End Sub

の中に組み込むものではありませんし、このようなコードは使いません。
このコードを使う必要性は何でしょうか?
各シートの全データをひとまとめにするコードですから、別物です。

>★の行がエラーになりました。

どのようなエラーメッセージでしょうか?
エラーメッセージも正確に書くようにしましょう。

以下の◆の行を追加すると、項目行しかないもしくは、項目行もないシート
は、処理されません

  If Selection.Rows.Count > 1 Then '◆
   Selection.Offset(1).Resize(Selection.Rows.Count - 1).Select
   Selection.Copy Sheets("一覧").Cells(Rows.Count, 1).End(xlUp).Offset(1)
  End If '◆

>また、修正方法は下段に張り付けるだけでよかったのでしょうか。

修正方法というか、マクロの機能が別物ですので、
全シートの全データを転記するのか、
アクティブシートの最終行を1行だけ転記するのか
という処理方法によって使い分けする必要があります。
なお、記述位置は、そこでいいです。

>>空欄セルがあるとエラーになる。
>
>と書きましたが、正確には
>・データのないシートがあると★行がエラーになる。
>・空白行があると、空白行以下のデータは一覧シートに記載されない。
>でした。

これは、全データ転記の場合かと思いますが、
CurrentRegionで取得されるセル範囲の特性は確認されていますか?
まずは、ヘルプで確認してみてください。
途中の1行全体が空白になっているシートがあるならば、CurrentRegionで取得される
範囲は、期待しているものと違う場合があります。

その場合は、どのような範囲を期待しているのか、説明してください。
たとえば、C列に値が入っている最終行までの範囲とか。

【66205】Re:複数のシートの統合について
お礼  kamaboko  - 10/8/8(日) 22:34 -

引用なし
パスワード
   ▼かみちゃん さん:

たびたびすみません。
私の追記の仕方が誤りでした。

教えていただいたコードを正しく(?)
下方
Next i
Sheets("一覧").Activate
の間に挿入したところ、

空白セルは一覧シートにコピーされず実行できました。

しかし、データのないシートがあるとやはり★行がエラーになります。

いまさらなのですが、
理想としては一覧データシートが常ににある状態で
更新行のみ一覧データの最下行に追加されるようにしたかったのですが。
今の状態では、各支店シートのみが存在する設定で、マクロを実行すると、
一覧シートが作成される状態なので。

今日はVBA勉強をいったん終了し、明日再開いたします。
1日でも早く完成させたいのですが、
昼前からずっとPCに向かっていたので,
VBAに慣れない私には、頭がパンクしそうなので(汗)

説明もいたらない点が多々あり、申し訳ございませんでした。
懲りずにまたよろしくお願いします。

【66206】Re:複数のシートの統合について
発言  かみちゃん E-MAIL  - 10/8/8(日) 22:54 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>教えていただいたコードを正しく(?)
>下方
>Next i
>Sheets("一覧").Activate
>の間に挿入したところ、
>
>空白セルは一覧シートにコピーされず実行できました。

何をどうしたいのかよくわからなくなってきました。
すべてのシートのすべてのデータを「一覧」シートにまとめたいということですか?
それとも、更新行だけを「一覧」シートに追加したいのでしょうか?
「更新行」というのは、最終行ではない場合もあるのでしょうか?
その場合、更新行の認識は、どのようにすればいいのでしょうか?
アクティブセルのある行でいいですか?

>しかし、データのないシートがあるとやはり★行がエラーになります。

[66204]でエラー回避のコードを提示していますが、ご確認いただいていますか?
もし、確認いただけているのであれば、現在のコードを再度提示してみてください。

>理想としては一覧データシートが常ににある状態で
>更新行のみ一覧データの最下行に追加されるようにしたかったのですが。
>今の状態では、各支店シートのみが存在する設定で、マクロを実行すると、
>一覧シートが作成される状態なので。

Sub 転記()

End Sub

は、確認されていますか?
更新行ではなくアクティブシートの最終行が転記されますが・・・
アクティブシートの最終行が更新行ではない場合は、更新行を何をもって認識
させるのかが必要です。

>今日はVBA勉強をいったん終了し、明日再開いたします。
>1日でも早く完成させたいのですが、
>昼前からずっとPCに向かっていたので,
>VBAに慣れない私には、頭がパンクしそうなので(汗)

いろいろ聞いてしまいましたが、ひとつずつ確実に返答していただけると、
完成は間近です。
何がしたいのか、大方推定できましたので、光は見えています。

【66207】Re:複数のシートの統合について
お礼  kamaboko  - 10/8/8(日) 23:24 -

引用なし
パスワード
   ▼かみちゃん さん:
かみちゃん様
超初心者の私にご丁寧な回答を何度もありがとうございます。

惑わす返信をしてしまい、申し訳ございません。
66204の回答ですべて完成されたことがわかりました。

PCをエクセル画面最大表示で格闘しており、返信に気づかず、
先ほど23:15頃、66206の回答に気づき、拝見しました。

私がしたかったことはとても少ないコードで出来るのですね。
本当に勉強になりました。
このたび、教えていただいた中で、自分ではまだ理解出来ていない点がたくさんありますので、明日引き続き勉強していきます。
質問の仕方も同様に大変勉強になりました。

かみちゃん様、本当にありがとうございます。感謝の気持ちでいっぱいです。
また、よろしくお願いします。

【66209】Re:複数のシートの統合について
質問  kamaboko  - 10/8/9(月) 19:49 -

引用なし
パスワード
   ▼かみちゃん さん:
かみちゃん様
昨日は何度も回答をいただき、希望の持てる言葉をありがとうございました。
残念ながら、完成には至っていなかったので、再度質問をさせていただきます。
よろしくお願いいたします。
今朝(9日7:30ころ)質問を返信して出勤したはずが、帰ってきてPCチェックしたところ、記録が無くちょっと落ち込みました(悲)

私が質問を読み違えていました。
66201のかみちゃん様からのの返信で
>入力後に以下のコードを実行すると、
>その時点のアクティブシートのC列の値が入っている最終行のC列〜G列をコピーして
>「一覧」シートのA列の値が入っている最終行の次の行に貼り付けします。
>したいことはそういうことではないのでしょうか?

>↑おっしゃる通りです。

すみません。ここで違う方向へ行ってしまいました。
「>その時点のアクティブシートのというところ」を見落としていました。
残念ながら「おっしゃる通り」ではありませんでした。

一番初めの“66198問”に戻ってしまうのですが、
したいことは、
・支店のどこかのシートに新たな1行加わると全データシートの最終行にも転記されるようにする。
(↑ここは1行とは限りませんね。1行入力後にエンターキーが押されると転記される、関数のイメージで書いてしまいました。VBAでは無理ですよね(笑))
・全データ(一覧)シートには単純にデータが入力順に追記され、並び替えや抽出はない。
→全データ(一覧)シートは最終行に新たに入力された行が追加されていく。
・シートによっては、データの無いシート(項目のみ)もあり、後にデータが入力される可能性がある。
です


>Sub 転記()
>End Sub
>は、確認されていますか?
>更新行ではなくアクティブシートの最終行が転記されます
↑昨日(8日)、確認しました。エラーもありませんでした。


>すべてのシートのすべてのデータを「一覧」シートにまとめたいということですか?
>それとも、更新行だけを「一覧」シートに追加したいのでしょうか?

↑まとめたいですが、単にまとめるというのは正しくない表現でしょう。
一覧シートにはすでに4月から7月までのデータが入力されています。
そのデータ一覧の最終行に引き続いて、更新された行が転記されるようにしたいのです。
データ一覧シートには、常に最新の全履歴が転記されているシートにする。
そのような訳でループをかけるコードが必要かと思いこんでおりました。
かつ、可能ならばsheet1”札幌” sheet2”仙台”・・・との順番で転記したいです。

>「更新行」というのは、最終行ではない場合もあるのでしょうか?
↑最終行“のみ”ではありません。各支店シートに一度に数行です。
実際は最終行は1行がほとんどですが、可能性としては20行までくらいあります。

>その場合、更新行の認識は、どのようにすればいいのでしょうか?
>アクティブセルのある行でいいですか?
>アクティブシートの最終行が更新行ではない場合は、更新行を何をもって認識
>させるのかが必要です。
↑ここが、私にはわからないところです。
質問者がわからないのでは困ってしまわれると思いますが、
アクティブセルのある行だけでは済まされないことはわかるのですが、
どう、定義してよいものか、どう調べればよいのかがわからなく、
ひたすら???で終わってしまっているところです。

また、長々書いてしまいましたがよろしくお願いいたします。

【66210】Re:複数のシートの統合について
発言  かみちゃん E-MAIL  - 10/8/9(月) 20:06 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>すべてのシートのすべてのデータを「一覧」シートにまとめたいということですか?
>>それとも、更新行だけを「一覧」シートに追加したいのでしょうか?
>
>↑まとめたいですが、単にまとめるというのは正しくない表現でしょう。
>一覧シートにはすでに4月から7月までのデータが入力されています。
>そのデータ一覧の最終行に引き続いて、更新された行が転記されるようにしたいのです。

であれば、最初に提示されたコードは、一部間違っています。
そのコードは、全シートの全データをまとめるコードであって、
特定のシートの特定の行だけを一覧シートに追加するものではありません。

>>「更新行」というのは、最終行ではない場合もあるのでしょうか?
>↑最終行“のみ”ではありません。各支店シートに一度に数行です。
>実際は最終行は1行がほとんどですが、可能性としては20行までくらいあります。

この場合ひとつ問題があります。
それは、転記対象行をどのように認識したらよいのかということです。
転記対象の行は、何かの目印のようなものがあるのでしょうか?

>>その場合、更新行の認識は、どのようにすればいいのでしょうか?
>>アクティブセルのある行でいいですか?
>>アクティブシートの最終行が更新行ではない場合は、更新行を何をもって認識
>>させるのかが必要です。
>↑ここが、私にはわからないところです。
>質問者がわからないのでは困ってしまわれると思いますが、

そうですね。どうしたいのかを決めるのは、kamabokoさんです。
マクロでするのではなく、手作業でする場合、どれを転記対象の行にしているのか
を確認していただき、まず、それだけを教えてください。
何か目印のようなもの、kamabokoさんが「転記する」と判断する基準があるはずです。

もう一度言いますが、この部分は、まず、手作業で手順を確認してください。
どれを転記対象にするのかを判断している基準があるはずです。

ちなみに、私なら、備考欄に「1」とか入力しておいて、それを目印として転記
したあと、備考欄の「1」を消去します。

【66211】Re:複数のシートの統合について
発言  kamaboko  - 10/8/10(火) 8:22 -

引用なし
パスワード
   ▼かみちゃん さん:
返信ありがとうございます。
またよろしくお願いします。

>まとめの一覧シートにはすでにデータが入力されていて、
>そのデータ一覧の最終行に引き続いて、更新された行が転記されるように
であれば、最初に提示されたコードは、一部間違っています。
そのコードは、全シートの全データをまとめるコードであって、
特定のシートの特定の行だけを一覧シートに追加するものではありません。

そこで、すでに転記された行を除くコードを加えて応用できないものか、と思っていました。


転記対象の行は、何かの目印のようなものがあるのでしょうか?

目印になるようなものはなく、
>備考欄に「1」とか入力しておいて、それを目印として転記したあと、備考欄の「1」を消去します。
こういった方法も出来なくはないのですが、
実は、このエクセルは上司が使用するためのもので、
「更新行を一覧シートに手作業でコピーしなくても済むように」という指示で始まりました。
>手作業で手順を確認
というのが、自宅での作業に限らせているので、限界がありますが。
転記対象としていま考えられるのが、A〜Gまで、全て一致する内容の行が無い。
というぐらいでしょうか・・・

“手作業”ほかに何かないか考えてみます。

【66212】Re:複数のシートの統合について
発言  かみちゃん E-MAIL  - 10/8/10(火) 8:52 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> 実は、このエクセルは上司が使用するためのもので、
>「更新行を一覧シートに手作業でコピーしなくても済むように」という指示で始まりました。

上司にまじめに「更新行とは何もって判断するのですか?」と聞いてみてください。
おそらく、更新行は上司しかわからないのではないかと思います。
それでは、Excelも私もkamabokoさんにもわからなくなります。

>>手作業で手順を確認
>というのが、自宅での作業に限らせているので、限界がありますが。
>転記対象としていま考えられるのが、A〜Gまで、全て一致する内容の行が無い。

そういう判断ならば、かなり難易度は高くなります。
A列〜G列までにすべて一致する行があるかを検索しなければいけないからです。
どこかの1列だけで、重複するものはないという前提になる列はないのでしょうか?
そうなると、すべて一致よりは、少し難易度は低くなります。

>“手作業”ほかに何かないか考えてみます。

そうですね。
個人的には、転記対象の行に目印をつけるのが視覚的にもよいと思いますが・・・

kamabokoさんのお考えを待ってみます。

【66214】Re:複数のシートの統合について
発言  kamabako  - 10/8/10(火) 13:19 -

引用なし
パスワード
   何度も返信ありがとうございます。

>>「更新行を一覧シートに手作業でコピーしなくても済むように」という指示で始まりました。
と出勤前に慌てて書いてしまいましたが、正確には
「手作業でコピーしなくて済むようになるとありがたい」と言われました。
この上司は、自分の担当以外の仕事も率先してするため、常に忙しい方です。
そこで、私で出来ることを暇なときに手伝ううちに、このエクセルを手掛けるようになりました。
私的感情的の余計な情報ですみません。

現在は時間がないので、熟考できず、申し訳ございません。

>そういう判断ならば、かなり難易度は高くなります。
そうですよね。言われて気づきました。

>どこかの1列だけで、重複するものはないという前提になる列はないのでしょうか?
実際の列はC〜Fが結合されています。
BとC〜FまたはC〜FとGのセット単位では一致することがありません。

引き続き、手作業部分を考えます。

【66216】Re:複数のシートの統合について
発言  かみちゃん E-MAIL  - 10/8/10(火) 13:48 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>実際の列はC〜Fが結合されています。
>BとC〜FまたはC〜FとGのセット単位では一致することがありません。
>
>>> C列  |D列  |E列 |F列 |G列
>>> ナンバー|品名  |金額 |日付 |備考
>>> 1   |コップ |1000 |4/1  |追加分 
>>> 2   |プレート|5000 |4/10 |
>>> 3   |ブラシ |3000 |5/15 |新規

では、実際のシートレイアウトとサンプルデータを説明しなおしていただけませんか?

上記のシートレイアウトでは、C列に重複をするものがないものとする、のように見えます。

【66220】Re:複数のシートの統合について
発言  kamabako  - 10/8/10(火) 15:01 -

引用なし
パスワード
   ▼かみちゃん さん:
何度もありがとうございます。
実際のシートレイアウトとサンプルデータは下記のとおりです。

<表題>

>>> A列  |B列  |C列〜F列 結合     |G列 |H列 |I列
>>> ナンバー|支店名|品名            |金額 |日付 |備考
>>> 1   |札幌 |来客用コップ 応接室    |1000 |4/1  |追加分 
>>> 2   |中央 |プレート 大 プラスチック |5000 |4/10 |
>>> 3   |新潟 |ブラシ 大小セット    |3000 |5/15 |新規


なお、詳しくは、会社で実際のエクセルを確認しましたら、
フィールドは1・2の2行
項目が3行目・A〜I
4〜33行がデータスペース・A〜I
34行は余白
C35にCOUNT(A4:A33) G35にSUM(G4:G33)
となっております。

>上記のシートレイアウトでは、C列に重複をするものがないものとする、のように見えます。
確かにです。私も始め理由が分かりませんでした。(今でも)
ただ、この書式はお役所提出用で一切変更出来ないのです(汗)
また、実際の品名は補足がダラダラ付く長いフレーズが入ります。
(単に長いから結合させたよう推測されます)
なので、列幅を変更しなければ問題ないと思います。
BとC〜FまたはC〜FとGとなると、
結局は5列検索させないといけなくなるのですよね。

また、関数も私にはネックとなりそうですが・・・

ただいまの時間帯、勉強時間が取れず、かみちゃん様の質問に答えるのが、精一杯ですみません。

【66221】Re:複数のシートの統合について
発言  かみちゃん E-MAIL  - 10/8/10(火) 15:20 -

引用なし
パスワード
   >実際のシートレイアウトとサンプルデータは下記のとおりです。
>
><表題>
>
> A列  |B列  |C列〜F列 結合     |G列 |H列 |I列
> ナンバー|支店名|品名            |金額 |日付 |備考
> 1   |札幌 |来客用コップ 応接室    |1000 |4/1  |追加分 
> 2   |中央 |プレート 大 プラスチック |5000 |4/10 |
> 3   |新潟 |ブラシ 大小セット    |3000 |5/15 |新規
>
>
>なお、詳しくは、会社で実際のエクセルを確認しましたら、
>フィールドは1・2の2行
>項目が3行目・A〜I
>4〜33行がデータスペース・A〜I

フィールドとは何ですか?
<表題>
となっているところが1行目と2行目なのでしょうか?

> ナンバー|支店名|品名            |金額 |日付 |備考

は、3行目ということですか?

>34行は余白

34行目は、必ず空白なのですね?
つまり最大でも、データは、4〜33行目にだけあるということでしょうか?

>>上記のシートレイアウトでは、C列に重複をするものがないものとする、のように見えます。
>確かにです。私も始め理由が分かりませんでした。(今でも)
>ただ、この書式はお役所提出用で一切変更出来ないのです(汗)
>また、実際の品名は補足がダラダラ付く長いフレーズが入ります。

私が聞いているのは、品名ではありません。
「ナンバー」が当初の提示より、変わったのですが、A列に重複するものがないのでは?
と聞いているのですが・・・

ただ、ここまで書いて、気づいたのですが、

> 転記対象としていま考えられるのが、A〜Gまで、全て一致する内容の行が無い。
>
> BとC〜FまたはC〜FとGのセット単位では一致することがありません。

とのことですが、B列とC列〜F列の結合セルもしくは、C列〜F列の結合セルとG列
のセット単位が、「一覧」シートの同じセルに存在しないものを転記対象とする
ということでしょうか?

本当にそれでいいのですか?

> 列幅を変更しなければ問題ないと思います。

列幅はまったく関係ありません。

>BとC〜FまたはC〜FとGとなると、
>結局は5列検索させないといけなくなるのですよね。

違います。
C列〜F列の4行目〜33行目までは、1行ずつ結合されているという前提であれば、
検索は、2列分だけです。

>ただいまの時間帯、勉強時間が取れず、かみちゃん様の質問に答えるのが、精一杯ですみません。

私は、構わないのですが、上司の方にきちんと要件を確認されたほうがいいです。
そうでないと、マクロのコードを修正して、できあがった途端に要件と違う!と
言われてもお互い困ってしまうと思います。

このあたりの「どうしたいのか」という確認は、コードを書ける書けないは、
まったく関係ありません。

【66227】Re:複数のシートの統合について
発言  kamaboko  - 10/8/11(水) 1:47 -

引用なし
パスワード
   ▼かみちゃん さん:
かみちゃん様、私の読解力の無さと説明の悪さ、さらにVBA超初心者のせいで
いまだ質問を繰り返してすみません。
会社では落ち着かず、誤った解釈、記載をするので投稿は控えることにしました。
上司にも確認しました。
自宅に戻り、参考本とネット情報を見ております。
改めて説明し直します。しつこいほど細かく書きますがご了承を。
今度こそ!

まずは、
実際のシートレイアウトとサンプルデータ。


    A列 |B列 |C列〜F列 結合 |G列 |H列 |I列
1行              <表題>
2行 余白
3行 ナンバー|支店名|品名       |金額 |日付 |備考
4行  1  |港  |コップ      |1000 |4/1  |追加分
5行  2  |品川 |プレート     |5000 |4/10 |
6行  3  |新宿 |ブラシ      |3000 |5/15 |新規



33行 30 |渋谷 |プレート     |2000 |6/3  |済
34行 余白
35行     合計 |C列COUNT(A4:A33) | G列SUM(G4:G33)


最大 データは、4〜33行目
最小 データは、3行目項目のみ
4〜33行のデータ行とデータ行の間に空白行は無い。

A列に重複するものがない。

※転記対象は一覧シートに転記していない各支店シートのA〜I列

例:
過去の時点で一覧シートには
新宿シートの4行5行および
京都シートの4行
の各A〜I列が一覧シートに次の通り転記されている。
一覧シート
1行目:項目
2行目:新宿シート4行目A〜I列
3行目:新宿シート5行目A〜I列
4行目:京都シート4行目A〜I列

現時点で
新宿シートの6行目A〜I列および
大阪シートの4行目A〜I列が追加された。


マクロ実行により、一覧シートが下記のようになるようにしたい。
マクロ実行後の一覧シート
1行目:項目
2行目:新宿シート4行目A〜I列
3行目:新宿シート5行目A〜I列
4行目:京都シート4行目A〜I列
5行目:新宿シートの6行目A〜I列★
6行目:大阪シートの4行目A〜I列★

マクロ実行により、4行目(マクロ実行前の最下行)の下に
★5行目と6行目が転記される。


「>重複するものがない」というところを読み違えていました。
というのも、他支店シートもA列は1〜30なので重複していると思っていました。
しかし、1シート(各支店シート)の範囲で重複していなければいいということですよね?

>上司にまじめに「更新行とは何もって判断するのですか?」と聞いてみてください。
>おそらく、更新行は上司しかわからないのではないかと思います。
この部分は私が理解できずにおりますが・・・
更新行とは上記例の★の部分となります。
★行についての私の記述が誤っていたと思われます。

以上ですが、ご理解いただけましたでしょうか。
よろしくお願いいたします。

【66228】Re:複数のシートの統合について
発言  かみちゃん E-MAIL  - 10/8/11(水) 5:58 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>実際のシートレイアウトとサンプルデータ。

ありがとうございます。

>「>重複するものがない」というところを読み違えていました。
>というのも、他支店シートもA列は1〜30なので重複していると思っていました。
>しかし、1シート(各支店シート)の範囲で重複していなければいいということですよね?

ここは私も勘違いしていたのかもしれませんので、[66221]でも書きましたが、

>>> 転記対象としていま考えられるのが、A〜Gまで、全て一致する内容の行が無い。
>>>
>>> BとC〜FまたはC〜FとGのセット単位では一致することがありません。
>>
>>とのことですが、B列とC列〜F列の結合セルもしくは、C列〜F列の結合セルとG列
>>のセット単位が、「一覧」シートの同じセルに存在しないものを転記対象とする
>>ということでしょうか?

ということですよね?

もう一度確認ですが、
支店シートの1行ずつのデータを一覧シートにないか確認して、
なかったら転記するという作業になるのですよね?

そうなると、たぶん、支店シートのA列とB列の組み合わせで、
一覧シートのA列とB列の組み合わせがあるかを検索し、なかったら転記対象と
判断する必要があるのではないでしょうか?

それであれば、やはり難易度は少し高くはなりますが、できなくはないです。

【66230】Re:複数のシートの統合について
発言  kamaboko  - 10/8/11(水) 8:18 -

引用なし
パスワード
   ▼かみちゃん さん:
かみちゃん様
毎度、疑問の残る提示ですみません。

>そうなると、たぶん、支店シートのA列とB列の組み合わせで、
>一覧シートのA列とB列の組み合わせがあるかを検索し、なかったら転記対象と
>判断する必要があるのではないでしょうか?

A列とB列の組み合わせでは、検索の意味がなくなってしまうと思います。
例で書きますと、
中央シート
4行  1  |港  |コップ      |1000 |4/1  |追加分
5行  2  |品川 |プレート     |5000 |4/10 |
6行  3  |新宿 |ブラシ      |3000 |5/15 |新規

品川シート
4行  1  |港  |グラス      |1000 |4/5  |
5行  2  |品川 |スティック    |5000 |4/15 |
6行  3  |新宿 |パック      |3000 |5/25 |

重複して書いてしまいますが、
1.支店シートのA列はすべて1〜30。1支店シートではA番号が重複しない。
2.BとC〜Fの組み合わせ、またはC〜FとGの組み合わせで、
 一覧シートのBとC〜Fの組み合わせ、またはC〜FとGの組み合わせがないか検索し、なかったら転記対象とする。
と判断します。

また、記載もれがあるかもしれませんが、タイムアウトで・・・。
よろしくお願いします。

【66231】Re:複数のシートの統合について
発言  かみちゃん E-MAIL  - 10/8/11(水) 8:29 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>A列とB列の組み合わせでは、検索の意味がなくなってしまうと思います。

そうでしょうか?

>1.支店シートのA列はすべて1〜30。1支店シートではA番号が重複しない。

ではないのですか?
そのため、A列とB列の組み合わせだけで重複するものはないのでは?と思っています。

結合セルが余計に複雑にさせるので、できるだけ使いたくないという理由もあります。

ただ、例で示されたように、もしかして、
B列の支店名は、ひとつのシート内に重複があるだけでなく、
他のシートにも存在するという意味ですか?
「新宿」支店が「品川」シートにも「中央」シートにも出てくるということですか?
そういう説明は初めて聞いたような感じがします。

>2.BとC〜Fの組み合わせ、またはC〜FとGの組み合わせで、
> 一覧シートのBとC〜Fの組み合わせ、またはC〜FとGの組み合わせがないか検索し、なかったら転記対象とする。
>と判断します。

わかりました。そういう仕様で理解します。
コードは、結合セルを扱いますので、少々複雑になるかもしれません。

【66241】Re:複数のシートの統合について
発言  kamaboko  - 10/8/11(水) 19:08 -

引用なし
パスワード
   ▼かみちゃん さん:
かみちゃん様。
また説明不足があり、余計なお手数をかけましてすみません。(汗)

>ただ、例で示されたように、もしかして、
>B列の支店名は、ひとつのシート内に重複があるだけでなく、
>他のシートにも存在するという意味ですか?
>「新宿」支店が「品川」シートにも「中央」シートにも出てくるということですか?

↑そうなのです。
新宿支店シートのB列に「新宿」「文京」「新宿」「品川」と出てくるし、
品川支店シートのB列に「品川」「中央」「目黒」「品川」と出てきます。
会社の都合上、扱う商品によってこの様な表記になります。
(数は少ないのですが、存在し、これからも出る可能性があります)
いままで、この系統の表記に慣れてしまって、
シート名や支店名の設定が一般的ではないことを忘れておりました。

>そういう説明は初めて聞いたような感じがします。

初めに説明せず、遠回りをさせてしまい、すみません。

と、いうわけで、
>>2.BとC〜Fの組み合わせ、またはC〜FとGの組み合わせで、
>> 一覧シートのBとC〜Fの組み合わせ、またはC〜FとGの組み合わせがないか検索し、なかったら転記対象とする。

と判断するに至りました。

かつ、重複しますが、
転記は全データシートの最終行に追加したいです。
出来ればシート順、左から、"札幌", "仙台", "新潟", "中央", "品川", "新宿", "世田谷", "港", "さいたま", "千葉", "横浜", "静岡", "名古屋", "京都", "大阪"
の順番で。

>コードは、結合セルを扱いますので、少々複雑になるかもしれません。
↑そもそも、すべてが初めてで、用語解説本を何度も見返ししている状態なので、構いません。
理解するよう、がんばります。
よろしくお願いいたします。

【66242】Re:複数のシートの統合について
発言  かみちゃん E-MAIL  - 10/8/11(水) 19:13 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>転記は全データシートの最終行に追加したいです。
>出来ればシート順、左から、"札幌", "仙台", "新潟", "中央", "品川", "新宿", "世田谷", "港", "さいたま", "千葉", "横浜", "静岡", "名古屋", "京都", "大阪"
>の順番で。

ようやく仕様が理解できましたので、検討します。
少しお時間をいただければと思います。
できるだけkamabokoさんのコードをベースにしますので、完成しましたら、
この発言を削除し、コードを提示いたします。

【66245】Re:複数のシートの統合について
発言  kamaboko  - 10/8/11(水) 22:40 -

引用なし
パスワード
   ▼かみちゃん さん:
かみちゃん様。
本当にお手間を取らせました。
よろしく、お願いいたします。

【66251】Re:複数のシートの統合について
発言  かみちゃん E-MAIL  - 10/8/12(木) 14:17 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>> ようやく仕様が理解できましたので、検討します。
>> 少しお時間をいただければと思います。
>> できるだけkamabokoさんのコードをベースにします
>>
> 本当にお手間を取らせました。

kamabokoさんが提示されたコードをベースにしようとしましたが、
結果としてほとんど原型をとどめないものになってしまいました。

他にももっと効率のようものがあるとは思いますが、以下のような
感じで処理できると思います。

Option Explicit

Option Base 1

Sub 支店別シート統合()
 Dim シート名 As Variant
 Dim 開始セル As String
 Dim i As Long
 
 Dim WS1 As Worksheet, WS2 As Worksheet
 Dim v1 As Variant, v2 As Variant
 Dim ii As Long, jj As Long, kk As Long
 Dim i_Max As Long
 Dim m As Variant
 
 シート名 = Array("札幌", "仙台", "新潟", "中央", "品川", "新宿", "世田谷", "港", "さいたま", "千葉", "横浜", "静岡", "名古屋", "京都", "大阪")
 
 開始セル = "$A$3"
 
 Set WS1 = Nothing
 On Error Resume Next
 Set WS1 = Sheets("一覧")
 On Error GoTo 0
 If WS1 Is Nothing Then
  Sheets.Add After:=Sheets(Sheets.Count)
  ActiveSheet.Name = "一覧"
 End If
 
'---- 既存の一覧シートの値を取得
 Sheets("一覧").Select
 With Range(開始セル).CurrentRegion
  v1 = .Resize(30 * 15, .Columns.Count + 1).Value
 End With
 jj = UBound(v1, 1)
 kk = UBound(v1, 2)
 For ii = 1 To jj
  'B列とC列(C列〜F列の結合セル)の値をキーとして取得
  v1(ii, kk) = v1(ii, 2) & "_" & v1(ii, 3)
  If v1(ii, 2) = "" And v1(ii, 3) = "" Then
   i_Max = ii
   Exit For
  End If
 Next
'----
 
'---- 転記対象データの取得
 For i = 1 To 15
  Set WS2 = Nothing
  On Error Resume Next
  Set WS2 = Sheets(シート名(i))
  On Error GoTo 0
  
  If Not WS2 Is Nothing Then
   WS2.Activate
   Range(開始セル).CurrentRegion.Select
   If Cells(Selection.Rows.Count + 1, 2).End(xlUp).Row > 3 Then
    v2 = Range(開始セル).CurrentRegion.Value
    jj = UBound(v2, 1)
    For ii = 1 To jj
     'B列かC列(C列〜F列の結合セル)のいずれかに値がある場合
     If v2(ii, 2) <> "" Or v2(ii, 3) <> "" Then
      'B列とC列(C列〜F列の結合セル)の組み合わせを一覧シートのキー(組み合わせ)から検索
      m = Application.Match(v2(ii, 2) & "_" & v2(ii, 3), _
       Application.WorksheetFunction.Index(v1, 0, kk), 0)
      If Not IsNumeric(m) Then
       v1(i_Max, 1) = v2(ii, 1)
       v1(i_Max, 2) = v2(ii, 2)
       v1(i_Max, 3) = v2(ii, 3)
       v1(i_Max, 7) = v2(ii, 7)
       v1(i_Max, 8) = v2(ii, 8)
       v1(i_Max, 9) = v2(ii, 9)
       v1(i_Max, kk) = v2(ii, 2) & "_" & v2(ii, 3)
       i_Max = i_Max + 1
      End If
     End If
    Next
   Else
    MsgBox WS2.Name & "シートにはデータがありません"
   End If
  End If
 Next
'----

'---- 一覧シートの出力
 Sheets("一覧").Activate
 With Range(開始セル).CurrentRegion
  .Resize(i_Max).Value = v1
 End With
'----

End Sub

なお、一覧シートは、支店シートと同じフォーマットとし、
33行目より下にもデータが追加されていくものとしています。
そうではない場合、一覧シートのシートレイアウトを教えてください。

また、動作確認もしてありますので、必要であれば、確認ファイルを差し上げ
ることも可能です。

【66261】Re:複数のシートの統合について
発言  kamaboko  - 10/8/13(金) 2:05 -

引用なし
パスワード
   ▼かみちゃん さん:
かみちゃん様
ありがとうございます。

私にはわからないコードだらけです(汗)

実行してみましたら、

"札幌"シート(最左シート)にはデータがありません。
実行時エラー1004
アプリケーション定義またはオブジェクト定義のエラーです。

のエラーメッセージ。

"札幌"シートのA3からI8が示されます。
(プロジェクトエクスプローラのSheet1が示される)

札幌シートに特別な部分は無いはずです。
どうしたらいいでしょう。

【66262】Re:複数のシートの統合について
発言  かみちゃん E-MAIL  - 10/8/13(金) 5:38 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>"札幌"シート(最左シート)にはデータがありません。
>実行時エラー1004
>アプリケーション定義またはオブジェクト定義のエラーです。
>
>のエラーメッセージ。
>
>"札幌"シートのA3からI8が示されます。
>(プロジェクトエクスプローラのSheet1が示される)
>
>札幌シートに特別な部分は無いはずです。

データが入力されているかどうかを、B列の最終行が3行目より大きいこと
という判断をしているのですが、そのコードが間違っていました。

   If Cells(Selection.Rows.Count + 1, 2).End(xlUp).Row > 3 Then
の部分は、
   If Selection.Cells(Selection.Rows.Count + 1, 2).End(xlUp).Row > 3 Then
としてください。

>(プロジェクトエクスプローラのSheet1が示される)

もしかして、コードは、どこのモジュールに書きましたか?
通常は、標準モジュールに書きますが、Sheet1モジュールに書いているのですか?
それはなぜなのでしょうか?購入された本などに書いていたのでしょうか?
適当なところに書いても動かないことがあります。

> 私にはわからないコードだらけです(汗)

本当は、もっと効率のよい書き方があります。
しかし、できるだけkamabokoさんのコードを残したつもりです。
ヘルプや過去ログ、Web等で調べるなどして勉強していただければと思います。
勉強の題材には、お恥ずかしいコードですが・・・

>アプリケーション定義またはオブジェクト定義のエラーです。

エラーメッセージを正確に書くことは、とてもよいことですが、
メッセージが出たときのデバッグボタンをクリックすると、
原因となっているコードが反転するので、そのコードを伝えることも大事なことです。
ちなみに、どのコードでそのエラーになっていますか?

【66263】Re:複数のシートの統合について
発言  kamabako  - 10/8/13(金) 10:03 -

引用なし
パスワード
   ▼かみちゃん さん:
かみちゃん様
何度も恐れ入ります。

教えてただいたコードに変更しました。

データの入っていないシートがあると、以下のメッセージが出ます。

○○(支店名)シートにはデータがありません
OKボタン

データの入っていないシートの数の分を“OKボタン”をクリックすると、
一覧シートには転記動作された状態のエクセルになります。
また、よろしくお願いします。

【66264】Re:複数のシートの統合について
発言  kamabako  - 10/8/13(金) 10:15 -

引用なし
パスワード
   ▼かみちゃん さん:
かみちゃん様

追伸です

MsgBox WS2.Name & "シートにはデータがありません"
部分かとおもうのですが・・・

【66265】Re:複数のシートの統合について
発言  かみちゃん E-MAIL  - 10/8/13(金) 10:26 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> データの入っていないシートがあると、以下のメッセージが出ます。
>
> ○○(支店名)シートにはデータがありません
> OKボタン
>
> データの入っていないシートの数の分を“OKボタン”をクリックすると、
> 一覧シートには転記動作された状態のエクセルになります。

何か不都合でもあるのでしょうか?
メッセージが邪魔なら、削除すればいいだけですが、あったほうがわかりやすいのではないでしょうか?

【66266】Re:複数のシートの統合について
発言  kamabako  - 10/8/13(金) 11:36 -

引用なし
パスワード
   ▼かみちゃん さん:

かみちゃん様

初歩的な質問ばかりですみません。

毎年使うエクセルなので、年度初めは空白シートがほとんどです。
10シート以上“OK”をクリックしていくのもたいへんなもので。

削除は
Else
MsgBox WS2.Name & "シートにはデータがありません"
でよかったでしょうか。
Else→条件が偽のときに実行する処理
もよくわかっていないので。

削除すると"中央",シートに該当するSheet4枚目だけ転記されなくなってしまうのです。
ここが判明できませんでした。

よろしくお願いいたします。

【66267】Re:複数のシートの統合について
発言  かみちゃん E-MAIL  - 10/8/13(金) 13:11 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> Else
> MsgBox WS2.Name & "シートにはデータがありません"
> でよかったでしょうか。

そうです。

> 削除すると"中央",シートに該当するSheet4枚目だけ転記されなくなってしまう

 シート名 = Array("札幌", "仙台", "新潟", "中央", "品川", "新宿", "世田谷", "港", "さいたま", "千葉", "横浜", "静岡", "名古屋", "京都", "大阪")

で処理対象としているシート名以外は、処理されませんが、
4枚目のシート名は、「中央」なのでしょうか?
以下のコードだけで確認してみてください。

Option Base 1

Sub TEST()
 Dim シート名 As Variant
 Dim i As Long
 Dim WS2 As Worksheet
 
 シート名 = Array("札幌", "仙台", "新潟", "中央", "品川", "新宿", "世田谷", "港", "さいたま", "千葉", "横浜", "静岡", "名古屋", "京都", "大阪")

 i = 4
 Set WS2 = Nothing
 On Error Resume Next
 Set WS2 = Sheets(シート名(i))
 On Error GoTo 0
 
 If Not WS2 Is Nothing Then
  MsgBox "シートのIndexは、" & WS2.Index
 Else
  MsgBox シート名(i) & "という名前のシートはありません"
 End If
End Sub

【66268】Re:複数のシートの統合について
お礼  kamaboko  - 10/8/14(土) 0:01 -

引用なし
パスワード
   ▼かみちゃん さん:

かみちゃん様。
教えていただいたコードで確認しました。
なんとも単純な私の入力ミスであったことがわかりました。

おかげ様で、無事、望んでいたものになりました。

本当にかみちゃんさんはすごいですね。
今回のコードを自分で勉強し直します。
このようなコードはすぐに作れるようにならないと思いますが、
起動した時の喜びを忘れずに引き続き勉強していきます。

大変長い道のりをお付き合いいただきまして、本当にありがとうございました。

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