Excel VBA質問箱 IV

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

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


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

【81948】Re:指定範囲の初めと終わりの値
お礼  おせち  - 22/1/30(日) 0:12 -

引用なし
パスワード
   ▼マナ さん:
>▼おせち さん:
>
>ここは、VBA(マクロ)関連の質問掲示板です。
>関数についての質問は、他所ですると適切な回答が得られるでしょう。
>
>例えば、
>
>エクセル質問掲示板
>ht tps://www.excel.studio-kazu.jp/cgi-bin/kazuwiki2r.cgi?mycmd=recent
>Excel Q&Aさろん(一般操作)
>ht tps://excelfactory.net/excelboard/exgeneral/excel.cgi

すみませんでした。
ご指摘ありがとうございました。
・ツリー全体表示

【81947】Re:指定範囲の初めと終わりの値
発言  マナ  - 22/1/29(土) 20:56 -

引用なし
パスワード
   ▼おせち さん:

ここは、VBA(マクロ)関連の質問掲示板です。
関数についての質問は、他所ですると適切な回答が得られるでしょう。

例えば、

エクセル質問掲示板
ht tps://www.excel.studio-kazu.jp/cgi-bin/kazuwiki2r.cgi?mycmd=recent
Excel Q&Aさろん(一般操作)
ht tps://excelfactory.net/excelboard/exgeneral/excel.cgi
・ツリー全体表示

【81946】指定範囲の初めと終わりの値
質問  おせち  - 22/1/29(土) 19:52 -

引用なし
パスワード
   初めて質問させて頂きます。
使える関数が有りましたらお教えください。
月 1 2 3 4 5 6
A 0 0 2 3 2 0
B 1 1 1 1 1 0
C 1 1 1 1 1 1

発生した月に件数がある一覧があるとき、
A 3 5
B 1 5
C 1 6
上記を表示させたいのですが、使える関数があるか分かりません。
どなたかよい方法をご存知のかた、
お教え頂きたくお願い致します。
・ツリー全体表示

【81945】Re:シート間のデータコピーでエラー
発言  マナ  - 22/1/29(土) 17:44 -

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

>それと、Sheet1、Sheet2共に次の工程が、先日の所定フォームへの流し込みです。
>よって、空白行は含めたくありません。

誤解があるといけないので、念のため確認ですが
空白行が途中に挿入されることはないですよ。
一番下に貼り付けられるだけです。
もともと空白の行に、空白行を上書きするだけなので
結果だけみると区別つかないと思いますが?
・ツリー全体表示

【81944】Re:シート間のデータコピーでエラー
回答  ackkn  - 22/1/29(土) 16:45 -

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

Intersectメソッドにトライしました。
上手くいきましたが、ちょっと冗長でしょうか?

Rmax = Cells(Rows.Count, 3).End(xlUp).Row
Intersect(Rows("3:" & Rmax), Columns("A:C")).Copy
ws2.Range("A" & ws2.Cells(Rows.Count, 1).End(xlUp).Row + 1). _
PasteSpecial (xlPasteAll)

Intersect(Rows("3:" & Rmax), Columns("E:P")).Copy
ws2.Range("E" & ws2.Cells(Rows.Count, 5).End(xlUp).Row + 1). _
PasteSpecial (xlPasteAll)
・ツリー全体表示

【81943】Re:シート間のデータコピーでエラー
回答  ackkn  - 22/1/29(土) 15:37 -

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

ありがとうございます。
非常に勉強になります。

>空白行を含めたくない場合は、Intersectメソッドが使うとよいです。
空白は含めたくないので、Intersectメソッドにトライします。

それと、Sheet1、Sheet2共に次の工程が、先日の所定フォームへの流し込みです。
よって、空白行は含めたくありません。
で、またヒントを2ついただきました。

1つは、列でコピーする。

2つ目は、シート丸ごとコピーして、それぞれで不要データを削除する。
この発想には驚きました。 もっと柔軟な発想を心掛けます。

この3つの案にトライして、また質問させてください。
よろしくお願いします。
・ツリー全体表示

【81942】Re:シート間のデータコピーでエラー
発言  マナ  - 22/1/29(土) 14:52 -

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

>選択範囲の下に1行空白行が選択されます。

その通りです。
空白行を含めたくない場合は、
Intersectメソッドが使うとよいです。
ネットで調べ、トライしてみてください。

ですが、空白行が余分にあると何か問題ですか。
動作の違いを理解して使うことが前提ですが
結果が同じであれば、どちらでもよい
と考えることもできませんか。
さらに言えば、見出し行も含めてコピペでも
同じ結果ではありませんか。
その場合、Offsetしないという意味です。
こんな感じです。
r1.Columns("A:C").Copy
とか
r1.Columns("E:P").Copy

メリットは、抽出0件の場合が考慮不要なため
コードがシンプルになります。


また、Sheet2に空のD列の目的がわかりませんが、
D列データももコピーしても問題ないなら
ロジックを変更するとよいかもしれません。

1)Sheet1をSheet2に丸ごとコピー
2)Sheet1で、<13日をフィルタ抽出・削除
3)Sheet1のフィルタ解除
4)Sheet2で、>12日をフィルタ抽出・削除
5)Sheet2のフィルタ解除
6)必要ならSheet2のD列データ削除
・ツリー全体表示

【81941】Re:シート間のデータコピーでエラー
回答  ackkn  - 22/1/29(土) 10:45 -

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

確認しました。
微妙に動作が違います。 下記コードの上3行がC列までのコピーですが、
マナさん仰るとおり、Rmaxがなくても行けましたが、選択範囲の下に1行空白行が
選択されます。

また、その下のコード3行がE列以降のP列までをコピーしたいのですが、
この r1.Resize(, 16).Offset(1, 0).Copy 部分の記述の仕方が分かりません。

しかし、上記同様、選択範囲の下に1行空白行が選択されます。

よろしくご教示下さい。

r1.Resize(, 3).Offset(1, 0).Copy
ws2.Range("A" & ws2.Cells(Rows.Count, 1).End(xlUp).Row + 1). _
PasteSpecial (xlPasteAll)

r1.Resize(, 16).Offset(1, 0).Copy
ws2.Range("E" & ws2.Cells(Rows.Count, 5).End(xlUp).Row + 1). _
PasteSpecial (xlPasteAll)
・ツリー全体表示

【81940】Re:シート間のデータコピーでエラー
回答  ackkn  - 22/1/28(金) 22:35 -

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

ありがとうございます。

>手作業で確認してみるとよいです。
>これでも同じということです。
> r1.Resize(, 3).Offset(1, 0).Copy

可視行しかコピーされないのは調べたんですが、と言うことは、そうですよね。
今一度、ステップで確認します。

>Sheet1とSheet2のD列には、何かデータがあるのでしょうか。
実は、ソート目的でA列とE列を&しています。 アホですよね。
・ツリー全体表示

【81939】Re:別ブックからのシートのコピーがうま...
発言  マナ  - 22/1/28(金) 19:57 -

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

コードに問題ないと思いますはが
手作業では、シートコピー可能なのでしょうか。
・ツリー全体表示

【81938】Re:シート間のデータコピーでエラー
発言  マナ  - 22/1/28(金) 19:54 -

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

> If WorksheetFunction.Subtotal(3, Range("A:A")) > 1 Then
>   Rmax = Cells(Rows.Count, 3).End(xlUp).Row
>   Range("A2").Resize(Rmax - 2, 3).Offset(1, 0).Copy

オートフィルタの結果は、データ範囲全体をコピーしても
可視行しかコピーされません。
わざわざ、Rmax を使う必要ありません。
手作業で確認してみるとよいです。

これでも同じということです。
 r1.Resize(, 3).Offset(1, 0).Copy

> Sheet1(=Sheet2)ですが、実はD列が非表示であるのです。
> この場合、
> コピーもA列からC列とE列からP列に分けて行う必要がありますよね?

Sheet1とSheet2のD列には、何かデータがあるのでしょうか。
・ツリー全体表示

【81937】Re:シート間のデータコピーでエラー
回答  ackkn  - 22/1/28(金) 15:00 -

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

テストに時間を取られてしまい、遅くなりましたが、オートフィルタの便利さを
実感しました。 ありがとうございました。

ただ、下記のコードになったのですが、最初のマナさんのすっきりしたコードから
かなり野暮ったくなった気がするのは気のせいでしょうか?


 Set ws = ActiveWorkbook.Worksheets("Sheet1")
 Set ws2 = ActiveWorkbook.Worksheets("Sheet2")

 Set r1 = ws.Range("A2").CurrentRegion
 Set r2 = ws2.Range("A2")
 r2.CurrentRegion.Offset(1, 0).ClearContents
  
 d = r1(3, 1).Value
 r1.AutoFilter 1, "<" & CLng(DateSerial(Year(d), Month(d), 13))
 If WorksheetFunction.Subtotal(3, Range("A:A")) > 1 Then
   Rmax = Cells(Rows.Count, 3).End(xlUp).Row
   Range("A2").Resize(Rmax - 2, 3).Offset(1, 0).Copy
   ws2.Range("A" & ws2.Cells(Rows.Count, 1).End(xlUp).Row + 1). _
   PasteSpecial (xlPasteAll)
   Range("E2").Resize(Rmax - 2, 12).Offset(1, 0).Copy
   ws2.Range("E" & ws2.Cells(Rows.Count, 5).End(xlUp).Row + 1). _
   PasteSpecial (xlPasteAll)

   Range("A2").Resize(Rmax - 2, 16).Offset(1, 0).Delete
 End If
 r1.AutoFilter
・ツリー全体表示

【81936】別ブックからのシートのコピーがうまく出...
質問  モモ  - 22/1/28(金) 11:20 -

引用なし
パスワード
   今コードを起動しているmlsmにwsobjシートをコピーしたいのですが
    For i = 1 To wbobj.Worksheets.Count
      Set WsObj = wbobj.Sheets(i)
      WsObj.Copy after:=ThisWorkbook.Worksheets(1)
    next
で1004エラーが出ます。
ThisWorkbook.Worksheets(1) 部分は色々試しましたが、うまくいきません。

    For i = 1 To wbobj.Worksheets.Count
      Set WsObj = wbobj.Sheets(i)
      WsObj.Copy
    next
ではループ毎に新しいブックが作成され、wsobjがコピーされていきます。
set copy は出来ているのいですが、貼り付け先を指定するとエラーが出ます。

試しに新しいワークブック(wbobj3)を開き、
      WsObj.Copy after:=wbobj3.Sheets(1)
でも1004エラーが発生します。
解決策がわからず、どうかご助言をお願い致します。
・ツリー全体表示

【81935】Re:シート間のデータコピーでエラー
回答  ackkn  - 22/1/27(木) 17:31 -

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

ありがとうございます。

しかし、めっちゃシンプルですね!
帰って確認させていただき、ご報告いたします。

あれから、自分でもオートフィルタを調べてコーディングしていたのですが、
Sheet1(=Sheet2)ですが、実はD列が非表示であるのです。

この場合、
コピーもA列からC列とE列からP列に分けて行う必要がありますよね?
・ツリー全体表示

【81934】Re:シート間のデータコピーでエラー
発言  マナ  - 22/1/27(木) 16:20 -

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

Sub test()
  Dim r1 As Range
  Dim r2 As Range
  Dim d As Date
  
  Set r1 = Worksheets("Sheet1").Range("A2").CurrentRegion
  Set r2 = Worksheets("Sheet2").Range("A2")
  r2.CurrentRegion.ClearContents
  
  d = r1(2, 1).Value
  r1.AutoFilter 1, "<" & CLng(DateSerial(Year(d), Month(d), 11))
  r1.Copy r2
  
  r1.Offset(1).Delete xlShiftUp
  r1.AutoFilter
  
End Sub
・ツリー全体表示

【81933】Re:シート間のデータコピーでエラー
回答  ackkn  - 22/1/26(水) 22:55 -

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

ありがとうございます。

愚問でした。
お手数をおかけしております。

よく確認しました。

Resize(1, 3).Select でも Resize(, 5).Select

ゼロでなければ、1 でも 略しても同一行なんですね。
改めて確認させていただきました。

情けない!
・ツリー全体表示

【81932】Re:シート間のデータコピーでエラー
回答  ackkn  - 22/1/26(水) 22:35 -

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

>>下表をセンター納品日でシートを分けたくて、下記のコードを考えたのですが、
>
>エラーの件は別にして、
>
>こういうのは、
>1)オートフィルタで抽出
>2)抽出された行を転記
>3)抽出された行を削除
>4)フィルタ解除
>が簡単ですよ。

ありがとうございます。

お礼ついでに、甘えていいですか。
コード例をお見せいただきたいです。

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

【81931】Re:シート間のデータコピーでエラー
発言  マナ  - 22/1/26(水) 21:50 -

引用なし
パスワード
   ▼ackkn さん:
^
>下表をセンター納品日でシートを分けたくて、下記のコードを考えたのですが、

エラーの件は別にして、

こういうのは、
1)オートフィルタで抽出
2)抽出された行を転記
3)抽出された行を削除
4)フィルタ解除
が簡単ですよ。
・ツリー全体表示

【81930】Re:シート間のデータコピーでエラー
発言  マナ  - 22/1/26(水) 18:37 -

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

>じゃー今回のように同一行で横にリサイズは出来ないのですか?

ステップ実行で確認してください

Sub test()
  Range("A1").Select
  Selection.Resize(1, 3).Select
  Selection.Resize(2).Select
  Selection.Resize(, 5).Select
  Selection.Resize(1, 1).Select
End Sub
・ツリー全体表示

【81929】Re:シート間のデータコピーでエラー
回答  ackkn  - 22/1/26(水) 16:47 -

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

早速のレス、ありがとうございます。

そうなんですね、
じゃー今回のように同一行で横にリサイズは出来ないのですか?

アホな疑問ならごめんなさい。
・ツリー全体表示

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