Excel VBA質問箱 IV

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

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


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

【12023】行選択 Hm 04/3/22(月) 13:30 質問
【12024】Re:行選択 Asaki 04/3/22(月) 14:08 回答
【12025】Re:行選択 ぴかる 04/3/22(月) 14:54 回答
【12026】Re:行選択 Hm 04/3/22(月) 14:58 質問
【12027】Re:行選択 Asaki 04/3/22(月) 15:08 回答
【12028】Re:行選択 Hm 04/3/22(月) 15:27 質問
【12030】Re:行選択 Asaki 04/3/22(月) 16:05 回答
【12032】Re:行選択 Asaki 04/3/22(月) 16:44 回答
【12036】Re:行選択 Hm 04/3/22(月) 17:02 質問
【12037】Re:行選択 Asaki 04/3/22(月) 17:08 回答
【12039】Re:行選択 ぴかる 04/3/22(月) 17:15 発言
【12041】Re:行選択 Asaki 04/3/22(月) 17:16 発言
【12048】Re:行選択 Hm 04/3/22(月) 17:48 お礼

【12023】行選択
質問  Hm  - 04/3/22(月) 13:30 -

引用なし
パスワード
   A列に下記の様にデータが入っています。(同じ数字(または文字)は飛び飛びにはなっておらず、必ず連続しています) 同じデータのみの行を全て選択するにはどうしたらよいのでしょうか?

1
1
2
3
3

【12024】Re:行選択
回答  Asaki  - 04/3/22(月) 14:08 -

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

1) ループでデータを確認して、選択範囲を特定してから選択
2) フィルタを使って抽出してから選択
などでしょうか。

いずれにしても、どのデータを選択するのかは、どうやって指定するのでしょうか?

【12025】Re:行選択
回答  ぴかる  - 04/3/22(月) 14:54 -

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

センスのないマクロ、作ってみました。あかんかな?。

Sub Test()

Dim カウント As Integer
Dim 文字 As String
Dim 行 As String

  カウント = 0
  文字 = InputBox("データを入力して下さい。")
  For I = 1 To Range("A1").End(xlDown).Row
    If Range("A" & I).Text = 文字 Then
      If カウント = 0 Then
        行 = I & ":" & I
        カウント = 1
      Else
        行 = 行 & "," & I & ":" & I
      End If
    End If
  Next
  If カウント = 1 Then
    Range(行).Select
  Else
    MsgBox "該当行無しです。"
  End If

End Sub

【12026】Re:行選択
質問  Hm  - 04/3/22(月) 14:58 -

引用なし
パスワード
   ▼Asaki さん:
>こんにちは。
>
>1) ループでデータを確認して、選択範囲を特定してから選択
>2) フィルタを使って抽出してから選択
>などでしょうか。

できればループを使用したいのですが・・


>いずれにしても、どのデータを選択するのかは、どうやって指定するのでしょうか?
一行目はタイトル行なのでA2から順に選択し、同じデータがあったらその全ての行をコピーし新規ブックを開いて貼付け、次は、先程選択した最終行の一行下のA○セルを選択し、それと同じデータの行を全て選択し・・・ということをしたいのです。
まったくの初心者で、説明もへたくそで申し訳ありませんm(_ _)m

【12027】Re:行選択
回答  Asaki  - 04/3/22(月) 15:08 -

引用なし
パスワード
   ぴかる さんがサンプルコードをUpされていますので、これをお借りして、
まずは、ある特定のデータを別のブックのシートにコピーすることを考えましょう。

>Range(行).Select
の部分を、別シートにコピーのコードに置き換えます。

新規ブック作成
ある行をコピー
新規ブックを保存して閉じる
という手作業を、マクロに記録してみてください。

【12028】Re:行選択
質問  Hm  - 04/3/22(月) 15:27 -

引用なし
パスワード
   ▼Asaki さん:
>ぴかる さんがサンプルコードをUpされていますので、これをお借りして、
>まずは、ある特定のデータを別のブックのシートにコピーすることを考えましょう。
>
>>Range(行).Select
>の部分を、別シートにコピーのコードに置き換えます。
>
>新規ブック作成
>ある行をコピー
>新規ブックを保存して閉じる
>という手作業を、マクロに記録してみてください。

Range(行).Select
  Selection.Copy
  Sheets("Sheet2").Select
  Range("A1").Select
  ActiveSheet.Paste 
  Application.CutCopyMode = False
  Selection.Copy
  Workbooks.Add
  ActiveSheet.Paste
  Application.CutCopyMode = False
  ActiveWorkbook.SaveAs Filename:= _
    "C:\Documents and Settings\g0238\My Documents\Book2.xls",   FileFormat:= _
    xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
    , CreateBackup:=False
    
  ActiveWindow.Close

Asaki様、これで良いのでしょうか・・

【12030】Re:行選択
回答  Asaki  - 04/3/22(月) 16:05 -

引用なし
パスワード
   取り敢えず、マクロの記録で出来たコードを編集します。

>Selection.Copy
>Sheets("Sheet2").Select
>Range("A1").Select
>ActiveSheet.Paste
>Application.CutCopyMode = False
>Selection.Copy
>Workbooks.Add
>ActiveSheet.Paste
>Application.CutCopyMode = False
>ActiveWorkbook.SaveAs Filename:= _
>  "C:\Documents and Settings\g0238\My Documents\Book2.xls", FileFormat:= _
>  xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
>  , CreateBackup:=False
>
>ActiveWindow.Close


Selection.Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:= _
  "C:\Documents and Settings\g0238\My Documents\Book2.xls", FileFormat:= _
  xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
  , CreateBackup:=False
ActiveWindow.Close

次に、コピーする領域は Selection ではありませんので、この部分を直します。
簡単のために、ワークシートオブジェクトを変数に格納します。
変数の宣言とデータの設定処理を追加します。
Dim sh As Worksheet
Set sh = ThisWorkbook.ActiveSheet

これらを使って
>Selection.Copy
>Workbooks.Add
>ActiveSheet.Paste
>Application.CutCopyMode = False

Workbooks.Add
sh.Range(行).Copy Destination:=ActiveSheet.Cells(1, 1)

これをぴかる さんのコードとあわせて、
Sub Test()

Dim カウント As Integer
Dim 文字 As String
Dim 行 As String
Dim i  As Long
Dim sh As Worksheet

  Set sh = ThisWorkbook.ActiveSheet
  
  カウント = 0
  文字 = InputBox("データを入力して下さい。")
  For i = 1 To Range("A2").End(xlDown).Row
    If Range("A" & i).Text = 文字 Then
      If カウント = 0 Then
        行 = i & ":" & i
        カウント = 1
      Else
        行 = 行 & "," & i & ":" & i
      End If
    End If
  Next
  If カウント = 1 Then
'    Range(行).Select
  
    Workbooks.Add
    sh.Range(行).Copy Destination:=ActiveSheet.Cells(1, 1)
    ActiveWorkbook.SaveAs Filename:= _
      "C:\Documents and Settings\g0238\My Documents\Book2.xls", FileFormat:= _
      xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
      , CreateBackup:=False
    ActiveWindow.Close
  Else
    MsgBox "該当行無しです。"
  End If

End Sub

【12032】Re:行選択
回答  Asaki  - 04/3/22(月) 16:44 -

引用なし
パスワード
   次に、ある特定のデータだけでなく、全データを種類別に別のブックにコピーする処理を考えます。

手順としては、
For 〜 Next でA列をループ
値が1行前と同じならカウントアップ
値が変わったら別ブックに書き出し

全データをループするので、
>文字 = InputBox("データを入力して下さい。")
は不要です。
代わりに、この変数には、1行前の値を入れておくのに利用します。

で、↓のような感じです。
Sub Test2()

Dim カウント As Integer
Dim 文字 As String
Dim 行 As String
Dim i  As Long
Dim sh As Worksheet
Dim j  As Long

  Set sh = ThisWorkbook.ActiveSheet
 
  カウント = 0
'  文字 = InputBox("データを入力して下さい。")
  文字 = Range("A2").Text
  j = 1
  For i = 2 To Range("A1").End(xlDown).Row + 1
    If sh.Range("A" & i).Text = 文字 Then
      If カウント = 0 Then
        行 = i & ":" & i
        カウント = 1
      Else
        行 = 行 & "," & i & ":" & i
      End If
    Else
        Workbooks.Add
        sh.Range(行).Copy Destination:=ActiveSheet.Cells(1, 1)
        ActiveWorkbook.SaveAs Filename:= _
          "C:\Documents and Settings\g0238\My Documents\Book" & j & ".xls", FileFormat:= _
          xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
          , CreateBackup:=False
        ActiveWindow.Close
        文字 = sh.Range("A" & i).Text
        j = j + 1
        行 = i & ":" & i
    End If
  Next

End Sub


問題は、保存するときのファイル名ですが、取り敢えず連番にしておきました。

先ほどの、ある特定のデータのみをコピーする処理中のループは、以下のように変更してください。
>For i = 1 To Range("A2").End(xlDown).Row

For i = 2 To Range("A1").End(xlDown).Row

【12036】Re:行選択
質問  Hm  - 04/3/22(月) 17:02 -

引用なし
パスワード
   Asaki様。
できました(*^^*)
何から何まで教えていただき、すみませんでした・・・。
ありがとうございますm(_ _)m

そこでもう一つ質問なんですが・・
ファイル名を、A2セルに入っている値(文字・数値)にするにはどうすれば・・?

【12037】Re:行選択
回答  Asaki  - 04/3/22(月) 17:08 -

引用なし
パスワード
   ファイル名を指定している部分に、Range("A2").Text を指定します。
>"C:\Documents and Settings\g0238\My Documents\Book2.xls"

"C:\Documents and Settings\g0238\My Documents\" & sh.Range("A2").Text & ".xls"

ある特定のコードを別ブックに保存の場合ですが。。。

【12039】Re:行選択
発言  ぴかる  - 04/3/22(月) 17:15 -

引用なし
パスワード
   大人げないけど、うちにもなんか言うてちょうだい。
ちと寂しい気分・・・。今回は、もういいですからネ。

【12041】Re:行選択
発言  Asaki  - 04/3/22(月) 17:16 -

引用なし
パスワード
   >大人げないけど、うちにもなんか言うてちょうだい。
>ちと寂しい気分・・・。今回は、もういいですからネ。
すみません。
勝手にお借りしてました。m(_ _)m

【12048】Re:行選択
お礼  Hm  - 04/3/22(月) 17:48 -

引用なし
パスワード
   ▼ぴかる さん:
>大人げないけど、うちにもなんか言うてちょうだい。
>ちと寂しい気分・・・。今回は、もういいですからネ。

ごめんなさいm(_ _)m
ぴかる さん とAsakiさんのおかげでうまくいきました。
また何かあったらよろしくお願い致します。

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