Excel VBA質問箱 IV

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

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


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

【24712】選択したシートのデータ抽出 oshiete 05/5/5(木) 14:37 質問[未読]
【24714】Re:選択したシートのデータ抽出 ちゃっぴ 05/5/5(木) 18:50 回答[未読]
【24722】Re:選択したシートのデータ抽出 小僧 05/5/6(金) 11:09 回答[未読]
【24725】Re:選択したシートのデータ抽出 oshiete 05/5/6(金) 11:52 発言[未読]
【24726】Re:選択したシートのデータ抽出 ちゃっぴ 05/5/6(金) 13:21 回答[未読]

【24712】選択したシートのデータ抽出
質問  oshiete  - 05/5/5(木) 14:37 -

引用なし
パスワード
   例えば顧客コード001から100のシートを作成し、合計シートで抽出対象のシートを選択する。

シート名:001 (no.とシート名は同じにしている。)
     A    B    C     D
1   no.    name
2   001    aaaa
3
4   month   data1  data2   ......
5    4    xxx,xxx xxx,xxx  ......
6    5    xxx,xxx xxx,xxx  ......
7    6    xxx,xxx xxx,xxx  ......

___________________________________________________________________________
001/002/003/004/...................../100/total4/total5/...... シートタブ
(シート001〜100迄のフォームは一緒)

シート名:total4 (4月分抽出シート)

    A    B     C     D
1   no.  name  data1  data2
2   001  aaaa  xxx,xxx xxx,xxx  ......
セルC2の計算式 ='001'!$B$5  D2は ='001'!$C$5
          ('001'!はシート名です)
3  005  eeee xxx,xxx xxx,xxx
4  013  mmmm xxx,xxx xxx,xxx
5  030  ......   ......    ......
6  100  ......   ......    ......

セルC2を3行目以降のセルに貼り付けた場合、計算式が='001'!$B$5のままになるので、顧客コード013を抽出したい場合、計算式中のシート名'001'を'013'に換える必要がある。
ファンクションキー2(F2)で再編集で打ちかえると手間が掛かるので、VBAのプログラムでシートの選択ができるようになればと思い質問しました。(その前に可能かどうか疑問ですが。)
解りにくい質問で申し訳ありませんが何か良い方法等がございましたら教えていただきたいのですが。

【24714】Re:選択したシートのデータ抽出
回答  ちゃっぴ  - 05/5/5(木) 18:50 -

引用なし
パスワード
   置換すれば一発では?

【24722】Re:選択したシートのデータ抽出
回答  小僧  - 05/5/6(金) 11:09 -

引用なし
パスワード
   ▼oshieteさん ちゃっぴ さん:
こんにちは。

VBAの質問箱ということで、こんな感じでいかがでしょう?
total* のシートに以下のコードを貼り付けてみてください。


Private Sub Worksheet_Activate()
Dim Tsuki As Integer
Dim Cnt As Long
Dim MySheet As Worksheet

  If IsNumeric(Right(Me.Name, 1)) Then
    Tsuki = Right(Me.Name, 1)
  Else
    MsgBox "シート名を確認してください。"
    Exit Sub
  End If
  
  Cnt = 2
  For Each MySheet In ActiveWorkbook.Worksheets
    If Not (MySheet.Name Like "total*") Then
      Cells(Cnt, 1).Value = MySheet.Name
      Cells(Cnt, 2).Value = ActiveWorkbook.Sheets _
            (MySheet.Name).Cells(2, 2).Value
      Cells(Cnt, 3).Value = ActiveWorkbook.Sheets _
            (MySheet.Name).Cells(Tsuki + 1, 2).Value
      Cells(Cnt, 4).Value = ActiveWorkbook.Sheets _
            (MySheet.Name).Cells(Tsuki + 1, 3).Value
      Cnt = Cnt + 1
    End If
  Next

End Sub

「001」〜「100」のシートと、「total*」のシートのみで構成されていれば
「total*」のシートを表示させた際に自動で数値が入ると思われます。

【24725】Re:選択したシートのデータ抽出
発言  oshiete  - 05/5/6(金) 11:52 -

引用なし
パスワード
   ちゃっぴ さん 小僧 さん
返信遅れて本当に申し訳ないです。

ちゃっぴ さん
置換でテストいたしましたが、私のやり方がおかしいのでしょう、
上手くいきませんでした。例えば123を111に置換すると他のデータ、
仮に金額が入っているデータ123,456が111,456になってしまうのです。
でも私の質問に答えてくれるのはとても嬉しいです。感謝!

小僧 さん
有難うございます。やってみます!
また分からないことがあったら質問してもいいですか?

【24726】Re:選択したシートのデータ抽出
回答  ちゃっぴ  - 05/5/6(金) 13:21 -

引用なし
パスワード
   >置換でテストいたしましたが、私のやり方がおかしいのでしょう、
>上手くいきませんでした。例えば123を111に置換すると他のデータ、
>仮に金額が入っているデータ123,456が111,456になってしまうのです。
>でも私の質問に答えてくれるのはとても嬉しいです。感謝!

当然でしょう。そういう仕様なのですから・・・

"123"を置換しようとするからほかのDataまで引っかかるわけで、
"'123'!"ならどうなるでしょう?

もっとも、それも他で使用されていれば置換されてしまいますが、
それなら、Sheet名をあらかじめ他のDataとかぶらないような命名規約にするとか
対処方法はいろいろあるでしょう。
範囲を限定するだけですむ場合もありますし・・・

もう少し、頭を柔軟にしてみましょう。

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