Excel VBA質問箱 IV

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

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


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

【67253】シート名を指定する りんご 10/11/17(水) 17:01 質問[未読]
【67254】Re:シート名を指定する Jaka 10/11/17(水) 17:20 発言[未読]
【67261】Re:シート名を指定する りんご 10/11/17(水) 19:23 発言[未読]
【67263】Re:シート名を指定する UO3 10/11/17(水) 21:08 発言[未読]
【67292】Re:シート名を指定する りんご 10/11/21(日) 14:16 回答[未読]
【67296】Re:シート名を指定する よろずや 10/11/21(日) 19:04 発言[未読]
【67305】Re:シート名を指定する りんご 10/11/22(月) 19:24 お礼[未読]
【67370】Re:シート名を指定する UO3 10/11/28(日) 22:50 回答[未読]
【67264】Re:シート名を指定する Jaka 10/11/18(木) 13:38 発言[未読]
【67293】Re:シート名を指定する りんご 10/11/21(日) 14:20 お礼[未読]
【67273】Re:シート名を指定する metabeaux 10/11/19(金) 10:36 発言[未読]
【67294】Re:シート名を指定する りんご 10/11/21(日) 14:29 発言[未読]
【67295】Re:シート名を指定する mxpx 10/11/21(日) 16:39 発言[未読]
【67306】Re:シート名を指定する りんご 10/11/22(月) 19:38 発言[未読]

【67253】シート名を指定する
質問  りんご  - 10/11/17(水) 17:01 -

引用なし
パスワード
   皆様こんにちわ。お世話様です。

データを同じブックのほかのシートからコピペするときに、該当のシート名を指定してコピペすることは可能でしょうか。

Dim varFileName As Variant
varFileName = Application.GetOpenFilename(strFilter, 1, strTitle, False)
Set WB1 = Workbooks.Open(Filename:=varFileName)

こんな感じで書いていますが、これはブックオープンなので、シート選択をするにはどうしたらよいのでしょうか。
よろしくご指導をお願いします。

【67254】Re:シート名を指定する
発言  Jaka  - 10/11/17(水) 17:20 -

引用なし
パスワード
   質問の意味が良くわかってないけど。

>Set WB1 = Workbooks.Open(Filename:=varFileName)
WB1.Sheets("xxxxx").Range(・・・・

の事でしょうか?

【67261】Re:シート名を指定する
発言  りんご  - 10/11/17(水) 19:23 -

引用なし
パスワード
   ▼Jaka さん:
>質問の意味が良くわかってないけど。
>
>>Set WB1 = Workbooks.Open(Filename:=varFileName)
>WB1.Sheets("xxxxx").Range(・・・・
>
>の事でしょうか?

そのことではないです。
Aシート Bシート(データがある) があるとして、Aシートへ Bシートからデータをコピペするわけですが、Bシートはその時々で違うシート名になるので、そのシート名を都度指定して、そのシート名のシートのデータをAシートへコピペするというモジュールを書きたいのです。

【67263】Re:シート名を指定する
発言  UO3  - 10/11/17(水) 21:08 -

引用なし
パスワード
   ▼りんご さん:
>そのことではないです。
>Bシートはその時々で違うシート名になるので、そのシート名を都度指定して、そのシート名のシートのデータをAシートへコピペするというモジュールを書きたいのです。

こんばんは。横入り。
そのことではないですといわれることが理解できていません。

つど、異なるシートというのはわかりましたが、それを、どのように指定するのでしょう?
・シート名一覧を出して選ばせる
・InputBox等で指定させる
・シートを手作業で選択させてアクティブシートにして処理する
・その他
どんな方法を考えていますか?

それと、全く別件ですが、データを転記する際に、Copy/Paste(PasteSpacial)を
使う人が多いですね。だめじゃないんですが、普通に
転記先セル領域.Value = 転記元セル領域.Value とすればいいのになぁと思ったりします。

【67264】Re:シート名を指定する
発言  Jaka  - 10/11/18(木) 13:38 -

引用なし
パスワード
   ユーザーフォームのリストボックスやらコンボボックスにシート名を表示して、それで選択させては...。


おまけ
ユーザーフォームに下記コードを貼り付けて、Showするだけ。

Public WithEvents CmBottan21 As MSForms.CommandButton
Public WithEvents CmBottan22 As MSForms.CommandButton
                        '45
Const 行間隔 As Long = 16, ボタン基準値 As Long = 45, Fm標準Hi As Long = 160
Const Fm標準Wd As Long = 240, OptonBt標準数 = 5
Const ChkTop1 As Long = 3

Private Sub CmBottan21_Click()
  Unload Me
  End
End Sub

Private Sub CmBottan22_Click()
  Dim MitOP_Obj As Object, PoSHnm() As String
  Dim PagBKnm As String, SelBkn As String, CT As Long
  CT = 0
  With Me.Controls.Item("マルチページ")
    PagBKnm = .Pages(.Value).Caption
    For Each MitOP_Obj In .Pages(.Value).Controls
      If MitOP_Obj.Value Then
       CheckCnt = CheckCnt + 1
       ReDim Preserve PoSHnm(1 To CheckCnt)
       PoSHnm(CheckCnt) = MitOP_Obj.Caption
       CT = 1
      End If
    Next
  End With
  On Error Resume Next
  If CT > 0 Then
    SelBkn = PagBKnm
    For Each WB In Workbooks
      If WB.Name = PagBKnm & ".xls" Then
       SelBkn = PagBKnm & ".xls"
       Exit For
      End If
    Next
    Workbooks(SelBkn).Activate
    Sheets(PoSHnm).Select
    If ActiveWindow.WindowState = xlMinimized Then
     ActiveWindow.WindowState = xlNormal
    End If
    'MsgBox PagBKnm & vbLf & PoSHnm
  Else
    MsgBox "CheckBoxチェック無"
  End If
  Erase PoSHnm
End Sub

'Private Sub UserForm_Click()
Private Sub UserForm_Initialize()
  Dim WB As Workbook, MaxWSC As Integer, Wbc As Integer
  For Each WB In Workbooks
    '非表示ブックの場合は、保留
    'If Windows(wb.Name).Visible = True Then
    If WB.Sheets.Count > MaxWSC Then
      MaxWSC = WB.Sheets.Count
    End If
  Next
  If MaxWSC > 60 Then
    MaxWSC = 60
    MsgBox "シート枚数の多すぎるBookがあります。" & vbCrLf & _
       "現在のシート枚数には、対応しておりません。" & vbCrLf & _
       "最高60枚、それ以上は表示されません。", vbExclamation
  End If
  MulTop = 3
  Me.Height = Fm標準Hi
  Me.Width = Fm標準Wd
  Me.Caption = "シート選択"

  Set MultiPage作成 = Me.Controls.Add("Forms.MultiPage.1", "マルチページ")
  With MultiPage作成
    .Left = 10
    .Width = Me.Width - 25
    .Top = MulTop

    For Wbc = 1 To Workbooks.Count
      If Wbc > 2 Then
       .Pages.Add , , .Count
      End If
      BNem = Application.Substitute(Workbooks(Wbc).Name, ".xls", "")
      .Item(Wbc - 1).Caption = BNem

      'Jは、OptionButtonの区切り個数
      n = 0
      Select Case MaxWSC
        Case Is <= 10
         j = 5
         Me.Height = Fm標準Hi   '標準状態
         ボタン位置高 = Me.Height - ボタン基準値
         実行ボタン位置横 = 135
        Case Is <= 16
         j = Application.RoundUp(16 / 2, 0)
         Me.Height = Fm標準Hi + 行間隔 * (j - OptonBt標準数)
         ボタン位置高 = Me.Height - ボタン基準値
         実行ボタン位置横 = 135
        Case Is <= 20
         j = Application.RoundUp(20 / 2, 0)
         Me.Height = Fm標準Hi + 行間隔 * (j - OptonBt標準数)
         ボタン位置高 = Me.Height - ボタン基準値
         実行ボタン位置横 = 135
        Case Is <= 30
         j = Application.RoundUp(30 / 3, 0)
         Me.Height = Fm標準Hi + 行間隔 * (j - OptonBt標準数)
         ボタン位置高 = Me.Height - ボタン基準値
         実行ボタン位置横 = 340 - 105 '340 - 150
         Me.Width = 340
        Case Is <= 35
         j = Application.RoundUp(35 / 3, 0)
         Me.Height = Fm標準Hi + 行間隔 * (j - OptonBt標準数)
         ボタン位置高 = Me.Height - ボタン基準値
         実行ボタン位置横 = 340 - 105
         Me.Width = 340
        Case Is <= 45
         j = Application.RoundUp(45 / 3, 0)
         Me.Height = Fm標準Hi + 行間隔 * (j - OptonBt標準数)
         ボタン位置高 = Me.Height - ボタン基準値
         実行ボタン位置横 = 340 - 105
         Me.Width = 340
       Case Is <= 60
         j = Application.RoundUp(60 / 4, 0)
         Me.Height = Fm標準Hi + 行間隔 * (j - OptonBt標準数)
         Me.Width = 440
         ボタン位置高 = Me.Height - ボタン基準値
         実行ボタン位置横 = Me.Width - 105
      End Select
      .Height = Me.Height - ボタン基準値 - 行間隔 + ChkTop1
      .Width = Me.Width - 25
      '.Value = Wbc - 1 'あとで消す
      For i = 1 To Workbooks(Wbc).Worksheets.Count
        If n = j Then
         n = 0
        End If
        n = n + 1
        Set MultiPage = MultiPage作成(Wbc - 1).Controls.Add("Forms.CheckBox.1", "MCheckBox" & i)
        With MultiPage作成(Wbc - 1).Controls("MCheckBox" & i)
          If i <= j Then
           .Left = 7
          ElseIf i <= j * 2 Then
           .Left = 120
          ElseIf i <= j * 3 Then
           .Left = 225
          Else
           .Left = 325
          End If
          If n = 1 Then
           .Top = ChkTop1 '0
          Else
           .Top = n * 行間隔 - 行間隔 + ChkTop1
          End If
          .Height = 行間隔
          .Caption = Workbooks(Wbc).Worksheets(i).Name
          If Workbooks(Wbc).Worksheets(i).Visible = False Then
           .Enabled = False
          End If
        End With
      Next
      W = 0
    Next
    If Wbc - 1 = 1 Then
      .Pages(1).Visible = False
    End If
    .Height = Me.Height - MulTop - 55
    '.Value = 0 'あとで消す
  End With

  Set CmBottan21 = Me.Controls.Add("Forms.CommandButton.1", "終了ボタン")
  With Me.Controls("終了ボタン")
    .Caption = "終 了"
    .Width = 75
    .Top = ボタン位置高 - ChkTop1
    .Left = 25
    .SetFocus
  End With
  Set CmBottan22 = Me.Controls.Add("Forms.CommandButton.1", "選択ボタン")
  With Me.Controls("選択ボタン")
    .Caption = "シート選択"
    .Width = 75
    .Top = ボタン位置高 - ChkTop1
    .Left = 実行ボタン位置横
  End With
End Sub

【67273】Re:シート名を指定する
発言  metabeaux  - 10/11/19(金) 10:36 -

引用なし
パスワード
   こんにちは。

▼りんご さん:
>Bシートはその時々で違うシート名になるので、そのシート名を都度指定して、そのシート名のシートのデータをAシートへコピペするというモジュールを書きたいのです。

マクロを使わずに、あなたが手作業で行う場合、「Bシート」である基準は何ですか?
・シート名が何か特定の文字から始まっている?
・シートが左から2番目である?

何か基準がないと、Bシートがどのシートなのか、をマクロに判断させることはできませんよ。

【67292】Re:シート名を指定する
回答  りんご  - 10/11/21(日) 14:16 -

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

inputbox 使用を考えていました。


>それと、全く別件ですが、データを転記する際に、Copy/Paste(PasteSpacial)を
>使う人が多いですね。だめじゃないんですが、普通に
>転記先セル領域.Value = 転記元セル領域.Value とすればいいのになぁと思ったりします。

私は、同ファイルにあるシート間ではご指摘の方法を使いますが、ファイルが別であると、できませんよね。
やってみましたが、できませんでしたよ。
出来るのでしたら、書き方を教えてください。その方がすっきりしますし、好みです。

【67293】Re:シート名を指定する
お礼  りんご  - 10/11/21(日) 14:20 -

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

また、ひとつ知識が増えました。感謝いたします。

早速 作ってまわしてみます。

また、そこで不具合がありました際には 相談にのっていただけましたら幸いです。

【67294】Re:シート名を指定する
発言  りんご  - 10/11/21(日) 14:29 -

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

質問を拾っていただき、ありがとうございます。


>マクロを使わずに、あなたが手作業で行う場合、「Bシート」である基準は何ですか?
>・シート名が何か特定の文字から始まっている?
>・シートが左から2番目である?
>
>何か基準がないと、Bシートがどのシートなのか、をマクロに判断させることはできませんよ。


私もそこが知りたかったのですが、他の方々からマクロで判断する方法をご指導いただき、一つの方法として教えていただきました。
シートの基準を指定しなくても可能だということを知りましたので、metabeaux さんにもお知らせいたします。

お互いに知識が増えてよかったですね。

【67295】Re:シート名を指定する
発言  mxpx  - 10/11/21(日) 16:39 -

引用なし
パスワード
   >
>>マクロを使わずに、あなたが手作業で行う場合、「Bシート」である基準は何ですか?
>>・シート名が何か特定の文字から始まっている?
>>・シートが左から2番目である?
>>
>>何か基準がないと、Bシートがどのシートなのか、をマクロに判断させることはできませんよ。
>
>
>私もそこが知りたかったのですが、他の方々からマクロで判断する方法をご指導いただき、一つの方法として教えていただきました。
>シートの基準を指定しなくても可能だということを知りましたので、metabeaux さんにもお知らせいたします。
>
>お互いに知識が増えてよかったですね。

人の話の受け取り方って、千差万別なんだね。
metabeauxさんは、そんな事は既に知っているから回答してるわけ。
あなたに意味が伝わっていないだけだと思う。

ブック間の値の書込みは、ブックから指定していけば何も問題がないはず。
もっと精進あれ。

【67296】Re:シート名を指定する
発言  よろずや  - 10/11/21(日) 19:04 -

引用なし
パスワード
   >>それと、全く別件ですが、データを転記する際に、Copy/Paste(PasteSpacial)を
>>使う人が多いですね。だめじゃないんですが、普通に
>>転記先セル領域.Value = 転記元セル領域.Value とすればいいのになぁと思ったりします。
>
>私は、同ファイルにあるシート間ではご指摘の方法を使いますが、ファイルが別であると、できませんよね。
>やってみましたが、できませんでしたよ。
>出来るのでしたら、書き方を教えてください。その方がすっきりしますし、好みです。

普通にやればできます。
出来ないのは、あなたのやり方が普通じゃないからです。
転記元セル領域や転記先セル領域の指定をするときに
チャンとブックも指定すればいいだけのことです。

【67305】Re:シート名を指定する
お礼  りんご  - 10/11/22(月) 19:24 -

引用なし
パスワード
   ▼よろずや さん:
>普通にやればできます。
>出来ないのは、あなたのやり方が普通じゃないからです。

ちょっと言い方が横柄ですね。せっかくの親切さも半減してしまいますよ。。。
私はあなたに何もしていないのに、そんな言い方はないと思いますが。。。


>転記元セル領域や転記先セル領域の指定をするときに
>チャンとブックも指定すればいいだけのことです。

ブック指定はもちろんしましたが、出来ませんでしたよ。
ブック指定の時、“Set”で略称を使いましたが、それがいけなかったのでしょうか。
まあ、使う機会の時に試せば分かることですが。。。。

出来るということを教えていただきましてありがとうございます。

【67306】Re:シート名を指定する
発言  りんご  - 10/11/22(月) 19:38 -

引用なし
パスワード
   ▼mxpx さん:
>
>人の話の受け取り方って、千差万別なんだね。
>metabeauxさんは、そんな事は既に知っているから回答してるわけ。
>あなたに意味が伝わっていないだけだと思う。
>
>ブック間の値の書込みは、ブックから指定していけば何も問題がないはず。
>もっと精進あれ。

まず、あなたは何のためにこんなメールを書いているのですか。
しかも、私の質問を理解していらっしゃらないですし。。。

あなたは判っているじゃないですか。人の受け取り方って千差万別ですよ。分からないから、助けていただきたいと、ここへ投稿しているのですよ。
相手に伝わるように助言するのが、助言する方の礼儀ではないでしょうか。
それが出来ないのは、ただ自分の知識が相手より上だとひけらかしたいだけかと思ってしまいます。(あなた方の知識が上なのは百も承知です。ご心配なく。)

突き放すようなコメントをするのでしたら、初めから助言しない方がよろしいかと思いますよ。

私に教えて下さった方は、そこをくんで このようにしたらどうですか、 と提案してその方法を指導してくれました。

【67370】Re:シート名を指定する
回答  UO3  - 10/11/28(日) 22:50 -

引用なし
パスワード
   ▼りんご さん:
>私は、同ファイルにあるシート間ではご指摘の方法を使いますが、ファイルが別であると、できませんよね。
>やってみましたが、できませんでしたよ。
>出来るのでしたら、書き方を教えてください。その方がすっきりしますし、好みです。

こんばんは
久しぶりにこの板にきました。

まだ、活発な(?)議論が続いていたんですね。
とりあえず、私への上記レスに対してのみ。
ブックが異なっても、もちろん、値の転記は可能ですよ。(単一セルでも複数セル領域でも)

基本はCopy1のような構文です。長ったらしくなるので、実際にはCopy2のようにして使ったりします。

Sub Copy1()
 Workbooks("ブック1.xls").Worksheets("シート名1").Range("○○").Value = _
  Workbooks("ブック2.xls").Worksheets("シート名2").Range("□□").Value
End Sub

Sub Copy2()
 Dim sh1 As Worksheet, sh2 As worsheet
 Set sh1 = Workbooks("ブック1.xls").Worksheets("シート名1")
 Set sh2 = Workbooks("ブック2.xls").Worksheets("シート名2")
 
 sh1.Range("○○").Value = sh2.Range("□□").Value
 
End Sub

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