Excel VBA質問箱 IV

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

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


94 / 3841 ページ ←次へ | 前へ→

【80603】Re:フォルダ内のファイルの一部シートの...
質問  mkmk  - 19/3/17(日) 15:58 -

引用なし
パスワード
   マナ さん
URLもよく見ていたのですが・・・わからず・・すみません。
pastspecialの前に貼り付け先のオブジェクト(RANGE等)がないという事でしょうか?その場合貼り付け先の、FILE SHEET RANGを順に記述すればよいのでしょうか?
貼り付け先のオブジェクトをどのように記述してよいかわからず悩んでいます。

最初の段階でも貼り付け元のファイルは開くが、貼り付けられないでいるので、貼り付け先が正しく指定されていない事が要因だとは思うのですが・・・

With Workbooks.Open(Filename:=myPath & myFile)
  .Worksheets("集計").Range("a1:b30").Copy Destination:=target.Offset(0, 1).pastspecial, Paste:=xlPasteValues
  .Close savechanges:=False

>>Copy Destination:=target.Offset(0, 1).pastspecialの後に
>> .pastspecial, Paste:=xlPasteValues
>>を追加したのですが、うまくいきませんでした。
>
>
>pastspecialの構文が間違っています。
>適当にしてもうまくいきません。
>まずは、ヘルプやネットで検索するようにしてください。
>
>ht tps://www.moug.net/tech/exvba/0050104.html
・ツリー全体表示

【80602】Re:フォルダ内のファイルの一部シートの...
発言  マナ  - 19/3/17(日) 15:03 -

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

>Copy Destination:=target.Offset(0, 1).pastspecialの後に
> .pastspecial, Paste:=xlPasteValues
>を追加したのですが、うまくいきませんでした。


pastspecialの構文が間違っています。
適当にしてもうまくいきません。
まずは、ヘルプやネットで検索するようにしてください。

ht tps://www.moug.net/tech/exvba/0050104.html
・ツリー全体表示

【80601】Re:フォルダ内のファイルの一部シートの...
質問  mkmk  - 19/3/17(日) 14:21 -

引用なし
パスワード
   ご返答ありがとうございます。
再度お願いします。

Copy Destination:=target.Offset(0, 1).pastspecialの後に
 .pastspecial, Paste:=xlPasteValues
を追加したのですが、うまくいきませんでした。
データの貼り付け先が不明のようです。
低レベルで申し訳ありません・・・。

.Worksheets("集計").Range("a1:b30").Copy Destination:=target.Offset(0, 1)
>
>>【質問】→この行の下に下記の記述をもってくればよいという事でしょうか?
>> Cells.Select
>>  Selection.Copy
>>  Selection.pastspecial Paste:=xlpastvalues, operation:=xlNone, skipblanks_:=False, transpse:=False
>>  Application.CutCopyMode = False
>
>
>いいえ。それだと、
>
>1)コピー→全てを貼付け、
>2)再度、コピー→値貼り付け
>
>となるので
>
>1)コピー→値貼り付け
>
>だけでは、だめですか。
・ツリー全体表示

【80600】Re:フォルダ内のファイルの一部シートの...
発言  マナ  - 19/3/17(日) 13:55 -

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

>【質問】→この行の下に下記の記述をもってくればよいという事でしょうか?
> Cells.Select
>  Selection.Copy
>  Selection.pastspecial Paste:=xlpastvalues, operation:=xlNone, skipblanks_:=False, transpse:=False
>  Application.CutCopyMode = False


いいえ。それだと、

1)コピー→全てを貼付け、
2)再度、コピー→値貼り付け

となるので

1)コピー→値貼り付け

だけでは、だめですか。
・ツリー全体表示

【80599】Re:フォルダ内のファイルの一部シートの...
質問  mkmk  - 19/3/17(日) 13:26 -

引用なし
パスワード
   ▼マナ さん:
早速のお返事ありがとうございます。
何度もすみません。もう少し質問させてください。


Set target = ThisWorkbook.Worksheets("全集計").Cells.SpecialCells(xlCellTypeLastCell).Offset(0).End(xlToLeft)
>こうではないですか?
>Set target = ThisWorkbook.Worksheets("全集計").Cells(1, Columns.Count).End(xlToLeft)
target = myFile
>これは、意味不明です。削除したほうがよいのでは
 →上記2点をこのように変更しました。
>>  .Worksheets("集計").Range("a1:b30").Copy Destination:=target.Offset(0, 1)
>この段階で、値のみ転記ではだめなのでしょうか?

【質問】→この行の下に下記の記述をもってくればよいという事でしょうか?
Cells.Select
  Selection.Copy
  Selection.pastspecial Paste:=xlpastvalues, operation:=xlNone, skipblanks_:=False, transpse:=False
  Application.CutCopyMode = False
・ツリー全体表示

【80598】Re:Sheet間の転記について
お礼  tarutaru  - 19/3/17(日) 12:47 -

引用なし
パスワード
   マナ様

オフセットの使用でできました!!

助かりました。また、勉強にもなりました。

今回も的確なアドバイスありがとうございます!!

今後もよろしくお願いいたします。
・ツリー全体表示

【80597】Re:フォルダ内のファイルの一部シートの...
発言  マナ  - 19/3/17(日) 12:25 -

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

>    Set target = ThisWorkbook.Worksheets("全集計").Cells.SpecialCells(xlCellTypeLastCell).Offset(0).End(xlToLeft)

こうではないですか?

Set target = ThisWorkbook.Worksheets("全集計").Cells(1, Columns.Count).End(xlToLeft)

  
>    target = myFile

これは、意味不明です。削除したほうがよいのでは?

>  

>  .Worksheets("集計").Range("a1:b30").Copy Destination:=target.Offset(0, 1)

この段階で、値のみ転記ではだめなのでしょうか?
・ツリー全体表示

【80596】Re:Sheet間の転記について
発言  マナ  - 19/3/17(日) 12:07 -

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

不規則だけど、転記先は固定ならば、
一例ですが、こんな感じで

Sheets("Sheet2").Range("A1").Value = Target.Value
Sheets("Sheet2").Range("B1").Value = Target.Offset(, 1).Value

ダブルクリックしたセルが Target で、
Targetからの相対的な位置が決まっているなら、Offsetが使えます。
・ツリー全体表示

【80595】フォルダ内のファイルの一部シートの集計
質問  mkmk  - 19/3/17(日) 12:00 -

引用なし
パスワード
   VBA初心者です。

同じフォルダ内の複数ファイルのSHEET"集計"のDATAを同じフォルダにある集計用ファイルのSHEET全集計にコピペしたいです。
集計元のファイルを順番に開いて、集計先の全集計の空白行に続けて転記していく記述をサイト検索し行ったのですが、集計元のファイルは開くのですが、集計先に貼り付けされないです。

11行目のSET TARGET=にカーソルを当てると、本来は集計先であるはずの
内容が、集計元のファイルが表示されます。
ここが原因だと思うのですが、どのような記述にすればよいのかわからず
ご教授頂けないでしょうか。

何卒宜しくお願いいたします。


Sub sample()
  Dim myPath As String
  Dim myFile As String
  Dim target As Range
  On Error Resume Next
  
  myPath = ThisWorkbook.Path & "\"
  Application.Calculation = xlCalculationManual
  Application.ScreenUpdating = False
  
  myFile = Dir(myPath & "*.xlsx")
  
  Do Until myFile = ""
  
   If myFile <> ThisWorkbook.Name Then
  
  
    Set target = ThisWorkbook.Worksheets("全集計").Cells.SpecialCells(xlCellTypeLastCell).Offset(0).End(xlToLeft)
  
    target = myFile
  
  With Workbooks.Open(Filename:=myPath & myFile)
  .Worksheets("集計").Range("a1:b30").Copy Destination:=target.Offset(0, 1)
  .Close savechanges:=False
   End With
   End If
   myFile = Dir()
  Loop
 
  Cells.Select
  Selection.Copy
  Selection.pastspecial Paste:=xlpastvalues, operation:=xlNone,  skipblanks_:=False, transpse:=False
  Application.CutCopyMode = False

End Sub
・ツリー全体表示

【80594】Re:Sheet間の転記について
質問  tarutaru  - 19/3/17(日) 11:12 -

引用なし
パスワード
   マナ様

早速のご返信ありがとうございます。
今回もお手数をおかけしますが、よろしくお願いいたします。

ご指摘の部分ですが、

Sheet1のB3から、B128(余裕を持って128にしています)まで、「建物名」が入力されています。その「建物名」セルをダブル・クリックするとSheet2( A1)に移動する構文は次のように書いています。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,Cancel As Boolean)

If Intersect(Target,Range(B3:B128)) Is Nothing Then Exit Sub
Application.Goto sheets(2).Range(“A1”)
 Cancel = True

End Sub

例として、Sheet1のC3 には、「所在地」を、D3には「所有者」を、E3には「連絡先」を、F3には「建築年月日」を、G3には「構造」を入力するようにしてあります。※入力はフォームまたは、セルに直入力。

それを、Sheet2のセルに(以下のように)ダブル・クリックでSheet1からSheet2に移動するとともに、転記完了となるようにしたいのです。

Sheet1         Sheet2
 B3     →    A1   
 C3     →    B1
 D3     →    A2
 E3     →    B2
 F3     →    C1
 G3      →     D1
 H3      →     C2

マナ様、お忙しい中、申し訳ありませんが、よろしくお願いいたします。
・ツリー全体表示

【80593】Re:Sheet間の転記について
発言  マナ  - 19/3/16(土) 20:18 -

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

>Sheet1のRange(B3)に用意している「建物名」セルをダブル・クリックすると、Sheet2の「印刷用の表」に移動出来るようにしているのですが、

そのコードを提示お願いします。
>
>質問は、「建物名」セルをダブル・クリックした際に、Sheet2に移動するとともに、その行のデータが不規則に並んでいる「印刷用の表」セルに転記出来るようにしたい。

具体例を挙げて、どのセルを、どこに転記したいのか説明お願いします。
・ツリー全体表示

【80592】Sheet間の転記について
質問  tarutaru  - 19/3/16(土) 18:21 -

引用なし
パスワード
   またお世話になります。

Sheet1に「データ表」があり、Sheet2に「印刷用の表」を用意しています。
Sheet1の「データ表」はRange(B3:N3)の範囲で、100行ほどあり、「印刷用の表」にはA4用紙に縦印刷を考えているため、Sheet1「データ表」のセル・データを格納するセルが不規則に並んでいます。

Sheet1のRange(B3)に用意している「建物名」セルをダブル・クリックすると、Sheet2の「印刷用の表」に移動出来るようにしているのですが、

質問は、「建物名」セルをダブル・クリックした際に、Sheet2に移動するとともに、その行のデータが不規則に並んでいる「印刷用の表」セルに転記出来るようにしたい。
というものです。

どなたかお詳しい方、御教示お願いいたします。
・ツリー全体表示

【80591】Re:Worksheet.Delete の動き
発言  マナ  - 19/3/15(金) 18:54 -

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

ontimeメソッドを使って、
シート削除後に、インポートではだめですか?
・ツリー全体表示

【80590】Re:型が一致しないがわかりません
発言  マナ  - 19/3/15(金) 18:37 -

引用なし
パスワード
   ▼ゆうすけ さん:


>Sh2Range.Offset(newRecordOffset, 0).Value = newRecordValues
>で、「型が一致しない」となってしまいます。


たぶん、それより前の段階で間違っていると思います。

>Dim newRecordOffset As Variant
>Set newRecordOffset = Sh2.Range("E24")


Option Explicit

Sub saveData()
  Dim i As Long
  Dim Sh1 As Worksheet
  Dim Sh2 As Worksheet
  Dim Sh1Range As Range
  Dim Sh2Range As Range
  Dim newRecordOffset As Long
  Dim dataRow As Long
  
  Set Sh1 = Worksheets("1")
  Set Sh1Range = Sh1.Range("K14:K41")
  Set Sh2 = Worksheets("2")
  Set Sh2Range = Sh2.Range("E24")

  For i = 14 To 41
    If Worksheets("1").Cells(i, 16).Value = 1 Then
      dataRow = 1
      newRecordOffset = Sh2Range.Value
      
      Do While Sh1Range.Cells(dataRow, 0).Value <> ""
        Sh2Range.Offset(newRecordOffset, 0).Value = _
            Sh1Range.Cells(dataRow, 1).Value
        dataRow = dataRow + 1
        newRecordOffset = newRecordOffset + 1
      Loop
      
    End If
  Next i
  
End Sub
・ツリー全体表示

【80589】Re:ブックモジュール global オブジェク...
お礼  みも  - 19/3/15(金) 18:17 -

引用なし
パスワード
   ▼γ さん:
>> Set KM = Workbooks("A").Worksheets("K")
>のWorkbooks("A")というのはこれでいいのですか?
>
>Bookを指定しなくてもActiveWorkbookと解釈されるはずなので記載しなくてよいし、
>明示的に書くなら、
>・Thisworkbookもしくは、
>・Workbooks("A.xlsm")

はじめにエラーが出た際、ブックも指定しないと認識してもらえないかと思い
上記の形でコードを書きました。
本来は仰っておられる形で書くべきかもしれません。
初歩的なところで申し訳ありません。


>
>こちらにはVBEのコードペインからコピーペイストして
>投稿されているのでしょうか?
>いやほんとうは、これとは別のコードで実行しています、
>というのは無しでお願いしたい。

コピーペーストしております。
ただ、シート名ファイル名は実際にはアルファベット1文字ではありません。すみません。
KM,HM や、最終行に関しては本当にこれを使用しております。


>ちなみに、
>Set KM = Sheet1
>などとしてテスト実行しましたが、特にエラーは発生しませんね。

そのような書き方もできるのですね。
アドバイスありがとうごさいます。

エラーは実は解決させて頂きましたので今後教えて頂いた
書き方も活用させて頂きます。

お忙しいところ、ありがとうございました。
・ツリー全体表示

【80588】Re:ブックモジュール global オブジェク...
お礼  みも  - 19/3/15(金) 18:10 -

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

>
>
>KM.Rows.Count
>
>だとどうなるでしょうか?

ご回答ありがとうごさいます。
実は、別の問題であったようで解決いたしました。

迅速にアドバイス頂きありがとうごさいました。
・ツリー全体表示

【80587】Re:ブックモジュール global オブジェク...
お礼  みも  - 19/3/15(金) 18:09 -

引用なし
パスワード
   ▼よろずや さん:
>>書く場所が悪いのか
>Workbook_WindowActivateイベントで実行させるのが吉。

ご回答ありがとうございます。
テストできる環境におらず、ご報告が遅れましてすみません。

Activateで実行したところ上手くいきました。
わかりづらい説明にもかかわらず迅速にアドバイス頂きありがとうごさいました。
・ツリー全体表示

【80586】型が一致しないがわかりません
質問  ゆうすけ  - 19/3/15(金) 17:11 -

引用なし
パスワード
   1週間前にVBAの勉強を始めました。少しずつエラーを直していったのですが、最後の部分でつまづいています。
下から8行目の
Sh2Range.Offset(newRecordOffset, 0).Value = newRecordValues
で、「型が一致しない」となってしまいます。
どなたかお助けください。

Sub saveData()
  Dim i As Long
  For i = 14 To 41
    If Worksheets("1").Cells(i, 16) = "1" Then
      Dim Sh1 As Worksheet
      Dim Sh2 As Worksheet
      Dim Sh1Range As Range
      Dim Sh2Range As Range
      Dim newRecordOffset As Variant
      Dim newRecordValues As Variant
      Dim dataRow As Long
      Set Sh1 = Worksheets("1")
      Set Sh1Range = Sh1.Range("K14:K41")
      Set Sh2 = Worksheets("2")
      Set Sh2Range = Sh2.Range("E24")
      Set newRecordOffset = Sh2.Range("E24")
      dataRow = 1
        Do While Sh1Range.Cells(dataRow, 0).Value <> ""
          newRecordValues = Array( _
            Sh1Range.Cells(dataRow, 1).Value _
            )
          Sh2Range.Offset(newRecordOffset, 0).Value _
            = newRecordValues
          dataRow = dataRow + 1
          newRecordOffset = newRecordOffset + 1
        Loop
    End If
  Next i
End Sub
・ツリー全体表示

【80585】Re:Worksheet.Delete の動き
回答  北浦  - 19/3/15(金) 8:53 -

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

>>※インポート対象のコード名が SHT とすると、インポート後は、SHT1 となる。
>
>OnTime メソッドを使って、処理後に、
>SHT1をSHTに変更してしまうのはだめでしょうか。

通常、コード名は、実行時、値の取得しかできないため、変更できず、
無理矢理、VBProject.VBComponents からなら変更できるのですが、
「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する」の設定を
しないといけなくなり、配布して使用する為、あまりやりたくない手法に
なってしまいます。

思い付きレベルでも構わないのでなんか考えられる方法があれば、
ご教授ください。

よろしくお願いいたします。
・ツリー全体表示

【80584】Re:Worksheet.Delete の動き
発言  マナ  - 19/3/14(木) 22:49 -

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

>※インポート対象のコード名が SHT とすると、インポート後は、SHT1 となる。

OnTime メソッドを使って、処理後に、
SHT1をSHTに変更してしまうのはだめでしょうか。
・ツリー全体表示

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