Excel VBA質問箱 IV

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

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


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

【46158】Activeな複数セル(1行のみ)を下へコピーするには? かも 07/1/24(水) 20:47 質問[未読]
【46160】Re:Activeな複数セル(1行のみ)を下へコピ... かみちゃん 07/1/24(水) 21:05 回答[未読]
【46169】Re:Activeな複数セル(1行のみ)を下へコピ... かも 07/1/25(木) 13:01 お礼[未読]
【46161】Re:Activeな複数セル(1行のみ)を下へコピ... ichinose 07/1/24(水) 21:17 発言[未読]
【46170】Re:Activeな複数セル(1行のみ)を下へコピ... かも 07/1/25(木) 13:04 お礼[未読]
【46162】Re:Activeな複数セル(1行のみ)を下へコピ... Kein 07/1/24(水) 22:06 回答[未読]
【46172】Re:Activeな複数セル(1行のみ)を下へコピ... かも 07/1/25(木) 13:08 お礼[未読]

【46158】Activeな複数セル(1行のみ)を下へコピ...
質問  かも  - 07/1/24(水) 20:47 -

引用なし
パスワード
   データベースへの入力作業中に、あったら便利と思いついて下記のマクロを作成しました。現在選択中のセルをInputBoxで入力した回数分下へコピーするものです。
しかし、例えばE5:H5のようにActiveな複数セルの内容を下へコピーする方法が思いつきません。いろいろと試してみましたができませんでした。どなたかご教授下さい。よろしくお願い致します。

Sub 下へコピー()

Dim i, k, r As Long
Dim H As Range
Set H = Sheets("Sheet1").Cells(ActiveCell.Row, ActiveCell.Column)
 
  k = InputBox("コピー回数入力", "回数入力")
        
    If Len(k) = 0 Then
      Exit Sub
    End If
   
  r = H.Row + 1
 
    For i = 1 To k
      Cells(r, H.Column).Value = H.Value
      r = r + 1
    Next i
 
  Cells(H.Row, H.Column).Select
 
End Sub

【46160】Re:Activeな複数セル(1行のみ)を下へコ...
回答  かみちゃん  - 07/1/24(水) 21:05 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>データベースへの入力作業中に、あったら便利と思いついて下記のマクロを作成
>しました。現在選択中のセルをInputBoxで入力した回数分下へコピーするものです。
>しかし、例えばE5:H5のようにActiveな複数セルの内容を下へコピーする方法

提示されたコードを拝見すると、値のみ(数式や書式は含まない)を複写したい
ようですので、それであれば、以下のような感じでできると思います。
最低限の簡単なエラー回避も入れてあります。

Sub CopyDown()
'下へコピー
 Dim i, k, r As Long
 Dim H As Range
 
 If TypeName(Selection) <> "Range" Then
  MsgBox "セル範囲が選択されていません"
  Exit Sub
 End If
 'Set H = Sheets("Sheet1").Cells(ActiveCell.Row, ActiveCell.Column)
 Set H = Selection
 If Selection.Rows.Count > 1 Then
  MsgBox "複数行選択されているためコピーできません"
  Exit Sub
 End If
 
 k = InputBox("コピー回数入力", "回数入力")
 If Not IsNumeric(k) And Len(k) = 0 Then
  Exit Sub
 End If
 '指定回数分下方向に値のみ複写
 H.Resize(k).Value = H.Value
End Sub

【46161】Re:Activeな複数セル(1行のみ)を下へコ...
発言  ichinose  - 07/1/24(水) 21:17 -

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


>データベースへの入力作業中に、あったら便利と思いついて下記のマクロを作成しました。現在選択中のセルをInputBoxで入力した回数分下へコピーするものです。
>しかし、例えばE5:H5のようにActiveな複数セルの内容を下へコピーする方法が思いつきません。いろいろと試してみましたができませんでした。どなたかご教授下さい。よろしくお願い致します。


Sub 下へコピー()
  Dim i As Long, k As Variant, r As Long
  Dim H As Range
  On Error Resume Next
  Set H = Selection
  If Err.Number <> 0 Then Exit Sub
  If H.Areas.Count > 1 Then Exit Sub
  k = Application.InputBox("コピー回数入力", "回数入力")
  If TypeName(k) = "Boolean" Then
    Exit Sub
    End If
  With H
    For i = 1 To k
     r = i * .Rows.Count
     .Offset(r, 0).Value = .Value
     Next
    End With
End Sub

下にコピーしたいセル範囲を選択して上記のコードを実行してください。
(但し、飛び飛びのセル範囲はの選択ははじかれます)

入力回数分コピーします。

【46162】Re:Activeな複数セル(1行のみ)を下へコ...
回答  Kein  - 07/1/24(水) 22:06 -

引用なし
パスワード
   >あったら便利と思いついて
便利にしたいなら、徹底的にやるべきでしょう。
一般的に普通のマクロにするより、イベントマクロを作った方が便利になります。
以下の全てをシートモジュールの先頭から入れて下さい。
[使い方]
コピーしたい範囲を「一行かつ単一の範囲数」で選択し、右クリックします。
すると選択範囲が青色で塗り潰され、ステータスバーが出て"コピー回数は 1 回"
と表示します。そのまま右クリックを繰り返すと、回数は増えていきます。
目的の回数まで達したら、その範囲内のどこかをダブルクリックして下さい。
範囲の直下へ回数分だけ値を転記して、セルの色やステータスバー等を元どおり
に戻して終わります。このとき、青色の範囲外をダブルクリックすると、コピー
をせずに元どおりに戻します。

Private Cnt As Long
Private MyR As Range

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _
Cancel As Boolean)
  Const St As String = "コピー回数は "

 
  If Not MyR Is Nothing Then
   Cancel = True: Cnt = Cnt + 1
   Application.StatusBar = St & Cnt & " 回"
   Exit Sub
  End If
  With Target
   If .Rows.Count > 1 Then Exit Sub
   If .Areas.Count > 1 Then Exit Sub
   .Interior.ColorIndex = 5
   Set MyR = .Cells
  End With
  Cancel = True: Cnt = 1
  With Application
   .DisplayStatusBar = True
   .StatusBar = St & Cnt & " 回"
  End With
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancel As Boolean)
  If MyR Is Nothing Then Exit Sub
  Cancel = True
  If Intersect(Target, MyR) Is Nothing Then
   GoTo ELine
  Else
   MyR.Offset(1).Resize(Cnt).Value = MyR.Value
  End If
ELine:
  With Application
   .StatusBar = False
   .DisplayStatusBar = False
  End With
  MyR.Interior.ColorIndex = xlNone
  Set MyR = Nothing: Cnt = 0
End Sub

【46169】Re:Activeな複数セル(1行のみ)を下へコ...
お礼  かも  - 07/1/25(木) 13:01 -

引用なし
パスワード
   かみちゃん さん ありがとうございました。Activeな複数セルはSelectionの一語で表せることは勉強になりました。また。エラー回避の補足をしていただき助かりました。本当にありがとうございます。

【46170】Re:Activeな複数セル(1行のみ)を下へコ...
お礼  かも  - 07/1/25(木) 13:04 -

引用なし
パスワード
   ichinose さん
ありがとうございました。私個人の力では、一つの方法も思いつかなかったのに、いろいろな方法があるものだと勉強になりました。教えていただいたマクロは自分なりに勉強し身につけてゆくつもりです。本当にありがとうございました。

【46172】Re:Activeな複数セル(1行のみ)を下へコ...
お礼  かも  - 07/1/25(木) 13:08 -

引用なし
パスワード
   Kein さん
ありがとうございました。ここまでできてしまうとは正直とても驚きました。本シートには他のイベントも使用しておりますので、教えて頂いたマクロはうまく作動しなかったので、今回は他の回答者の方のものを使わせて頂くこととします。しかし、大切に保存し他の機会に活用させていただきたいと考えております。本当にありがとうございました。

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