• ベストアンサー

vba 任意のセルから動作開始

os xp excel 03 流れですけれどマクロを組み立ててもらいたいのですが? 任意のセルにカーソルを置いて其処からの動作開始 例えば 任意のセル C2 にカーソルを置いて *A Selection.Copy   ’ <---数字 Range("a65530").Select Selection.End(xlUp).Select '??? up の後一段 down しないと前の記録にかぶる為にdownさせたい。  '<---  ??? ActiveSheet.Paste Application.CutCopyMode = False '??? .Copyの完了後に元に(C2)に戻したい  '<---  ??? **A  *Aのマクロが終了したら セルが一段落ちて  '<---  ??? *B もしもセルが空白だったら 次の列へ (C2から開始ですからD2へ) '<---  ??? *C もしも次の列のセルが空白だったら 終了  '<---  ??? *D *Aに戻る。  '<---  ???

質問者が選んだベストアンサー

  • ベストアンサー
  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.2

myLine = Range("A65530").End(xlUp).Row とすれば myLine に最後の行数が入りますので それを +1 するなり、好きなように応用すれば良いのでは...

yuki-g
質問者

お礼

北海道で遅く寒いなかで有難うございました。 自分のレベル=ラベルなもので理解するように保存します。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

既出ご回答に、感動。完動といっているが 小生が問題を読むと、イベントと係わる問題ではないか? Sheet1のSelectionイベントに下記を貼り付け Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 1 Then MsgBox "A列以外を選択のこと" Else If Target.Cells.Count > 1 Then MsgBox "1セルのみ選択のこと" Else If Target = "" Then '空白 If Target.Offset(0, 1) = "" Then '空白+隣右空白=>何もしない Exit Sub Else '空白+右非空白=>隣右列コピー Target.Offset(0, 1).Copy Range("A65536").End(xlUp).Offset(1, 0) End If Else '非空白=>自身をコピー Target.Copy Range("A65536").End(xlUp).Offset(1, 0) End If End If End If End Sub こういうイメージでは無いか? A列以外をクリクすると、A列の最下行の次に追加していく。 空白の場合は右となりセルを追加する。 例データ A列は指定順序に関係するのでイメージだけ A列  B列  C列  D列    E列 1 2 3 2 2 ー 4 3 3 ー ー 5 2 4 ー 34 3 2 6 ー 41 3 ・・・ ーは空白セルを意味す。 ーーー テストは、A列を空白にして、B-E列データは例えば上記のように先に入力し、適当にセルをクリックしてA列の変化を見てください。 データを作るとき反応しては困るので VBE画面で実行ー中断状態にして、その後にシートにデータ入力し、入力し終わったら実行ーリセットでテストが始まる。そして任意のセルをクリックしてみる。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

こんなことですか?理解が違っていたら悪しからず。 Sub test() Dim srcRange As Range, destRange As Range If TypeName(Selection) <> "Range" Then Exit Sub If Selection.Cells.Count > 1 Then Exit Sub Set srcRange = Selection Set destRange = Range("a65530").End(xlUp).Offset(1, 0) Do srcRange.Copy destRange Set srcRange = srcRange.Offset(0, 1) Set destRange = destRange.Offset(1, 0) Loop Until srcRange.Value = "" End Sub

yuki-g
質問者

お礼

感動、完動、お世話様でした。 100%完動でした またのであいぉ

関連するQ&A

  • エクセルVBAで空白セルを削除する方法

    みなさん教えてください。 今エクセルVBAで、下記のようにのA列に空白セルがある場合にそのセルを削除し、 空白セルが無い場合何もしないと言うマクロを作っています(下記のように自動記録し ました)。 しかし、作成したマクロは、下記のようにA列に空白セルがない場合はエラーが出てし まいます。 空白セルが無い場合エラーが出ない方法を教えて頂けないでしょうか。 よろしくお願いします。 <マクロ> Sub Macro1() Columns("A:A").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.SpecialCells(xlCellTypeBlanks).Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp End Sub <データ> A --------- 1 2 1 1 1 3 4 ・ ・ ・ (以降約300行続きます)

  • VBA初心者です。任意のセルの自動計算をしたいのですが・・・

    自動マクロを使い作成していましたが、煮詰まりました。お知恵をいただきたくお願い致します。 シートの各セルの中に整数が入っているとします。(仮にシート一面に全て) エクセルの任意のセル(その都度列、行とも違う)に対して、87%(切捨て)を掛けた金額を出したいと思います。 出来れば、掛けるセルにカーソルを指定して、マクロの実行と共に同じセルに計算結果が出るようにしたいのですが・・・。 セルが決まっていれば、Range("A1").select のようにセル番地を指定出来ると思うのですが、計算したいセルが散らばってあり、尚且つカーソルで指定したセルのみを計算したい場合はどのようにコードを組めばよいのでしょうか? 分かりづらくて申し訳ありませんが、宜しくお願い致します。

  • 任意の複数セルをマクロで選択し、コピーする方法

    またお世話になります。 エクセルで選択された項目だけを抜き出して、新たに並べ替え、印刷するマクロを作っていますが、任意のセルからその横のセル3つを選択することが出来ません。表のイメージとしては、   A   B   C 1 氏名 獲得 点数 2 田中  3  30点 3 中村  5  50点 4 高橋 5 近藤  1  10点 6 南   ・   ・   ・ の中からB列に数値が入っている行だけを別のところへコピペするというものです。 現在まで作ったマクロは、 Sub Macro01() Range("B1").Select Selection.End(xlDown).Offset(0, -3).Select ここに「田中 3 30点」の3つのセルを選択する方法 Selection.Copy  ’印刷用の一番下から入力されているセルのひとつ下を選択する Range("N22").Select Selection.End(xlUp).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,   SkipBlanks:= _ False, Transpose:=False この作業を繰り返しして、一定のところで止まるようにしたい。 End Sub です。 お返事よろしくお願いいたします。

  • エクセルVBAで教えて下さい。

    A1のセルに [ 1- 5] 4.05398e-01 3.63385e-01 -2.22992e-01 9.89158e-03 -6.43695e-02 A2のセルに [ 6-10] -5.12224e-04 4.07480e-04 -2.73746e-04 -1.77853e-02 -2.13805e-03 A3のセルに [11-15] -6.88489e-03 -2.06765e-02 -9.44633e-03 6.97059e-03 -1.28400e-02 と、このような感じでA7セルまで同じ感じでスペースで空いた数値が入力されています。 A8のセルのみ [36-37] -6.39210e-03 -1.55806e-03 と入力されております。 まず行いたいのはスペースが空いてる部分で、それぞれの数値を各セルに分けたいです。 A1のセルに入力されている [ 1- 5] 4.05398e-01 3.63385e-01 -2.22992e-01 9.89158e-03 -6.43695e-02 ならば A1に[1-5] B1セルに4.05398e-01 C1セルに3.63385e-01 のように これをA1からA8のセルで行ったあと指定のセルを30行目に貼り付けます。 E1→A29 C2→B29 D2→C29 E2→D29 E3→E29 F3→F29 B4→G29 D5→H29 E5→I29 F5→J29 貼り付けのデータは増えていきます。つまり、30行目にデータが入ってる場合は そのデータが1行下の行に下がり、新たなデータが30行目に追加されます。 このようにして、データが最大で58行目まで追加される可能性があります。 最小であれば30行目、31行目の2つしかない場合あります。 この時、0の近似値を各列のセルから探し、当てはまるセルを赤く塗り潰すというのが 今回行いたいことです。 A列ならA30~A58までの中で0の近似値を探し、当てはまるセルを赤く塗り潰す。 ただ空白の場合は無視してもらいたいです。0の近似値だと空白が選択されてしまうので。 近似値探しの前までならマクロがありますのでご参照下さい。 Sub Macro4() ' ' Macro4 Macro ' ' Range("A1:A8").Select Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _ FieldInfo:=Array(Array(0, 1), Array(7, 1), Array(21, 1), Array(34, 1), Array(47, 1), _ Array(60, 1)), TrailingMinusNumbers:=True Range("A1").Select Range("E1").Select Selection.Copy Range("A29").Select ActiveSheet.Paste Range("C2:E2").Select Application.CutCopyMode = False Selection.Copy Range("B29").Select ActiveSheet.Paste Range("E3:F3").Select Application.CutCopyMode = False Selection.Copy Range("E29").Select ActiveSheet.Paste Range("B4").Select Application.CutCopyMode = False Selection.Copy Range("G29").Select ActiveSheet.Paste Range("D5:F5").Select Application.CutCopyMode = False Selection.Copy Range("H29").Select ActiveSheet.Paste Range("J7").Select Application.CutCopyMode = False Range("A29:K29").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("A29:K29").Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Range("A29").Select Range("A1:F8").Select Selection.ClearContents Range("A1").Select Range("K29").Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Selection.NumberFormatLocal = "G/標準" End Sub わかりずらい質問ですみませんが、ご指導の程 お願い致します。

  • VBA 動作の後、動作した行のA列にカーソルを移動

    エクセル2010を使っております。 以下の動作を自動記録したプロシージャが次のものですが、これに改良を加えたくて、 相談させていただきました。 (1)一覧というシートにおいて、A3セルからCtrl + ↓でA列の入力行の最下行に異動して、  そのセルの値をコピーし、A3セルに貼りつける、 (2)請求書というシートを選び、印刷する。 (3)一覧というシートに戻り、A列の入力行のうちの最下行に異動する。 ※A3セルに値を貼りつけると、3行目のB列以降→請求書シートという順にデータが飛び、 4行目からのデータを適宜に印刷したい思っております。 Sub 印刷() Range("A3").Select Selection.End(xlDown).Select Selection.Copy Range("A3").Select ActiveSheet.Paste Application.CutCopyMode = False Sheets("請求書").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False Sheets("一覧").Select Selection.End(xlDown).Select End Sub 改良したい点としては、以下のとおりです。 (1)A列の入力行の最下行ではなく、カーソルのある行(編集可能にしているとは限らない)の A列の値をA3セルに貼りつけるようにするにしたい。 (2)印刷した後、一覧シートのA列、最下行(印刷した行)にカーソルが移動するようになっていますが、体感的な動きとしてはそれと同じく、印刷した行(最初にカーソルのあった行)のA列にカーソルが移動するようにしたい。 どなたか、教えていただけると助かります。 よろしくお願いいたします。

  • 空白までのデータを範囲指定する

    EXCEL VBAにて教えてもらいたい事があります。 空白までの行列を範囲指定したいのです。         A  B   C   D  1   1123 123  12  57 2    32 1 5 52 3 2 98 852 11 4 65 2 72 1 A列からD列の行が空白になるまでの範囲を指定する マクロを教えてほしいです。 A列の最終行の次の行にカーソルを合わせるマクロはわかるのですが 範囲を指定する方法がわかりません。 よろしくお願いいたします。 最終行の次の行にカーソルを合わせるマクロ Range("A1").End(xlDown).Select ActiveCell.Offset(rowOffset:=1).Activate Selection.Copy

  • エクセル(VBA)で複数セルのコピーができません

    お世話になっております。 マクロを使って複数のセルを選択してコピーし、別のブックにあるシートへ 貼り付けたいのですが上手くいきません。  Range(Selection, Selection.End(xlToRight)).Select   Selection.Copy 上記のようにコピーしたいセルの入っている行全体の貼り付けは出来たのですが、必要なデータのセルのみ(隣り合っていない)を選択して 貼り付けようとすると何もコピーされていない状態で終了してしまいます。 (変数に代入してコピー等・・・) どなたか教えて下さい。

  • エクセルVBAについて

    VB初学者です。 この度上司命令にて多少かじり始めました。(今まで完璧な文系人間で生きてきました) 2点伺わせていただきます。 (1) Sub aaa() Range("A1:F10") .select With Selection . . . . End With End Sub この際("A1:F10") に限定せず、このマクロをどのセルにも適応するようにするにはどのようにしたらよろしいのでしょうか。なお、インプットボックスは使わずに、任意のセル(或いはセル範囲)に適応させることは可能なのでしょうか。 (2) A列に文字が入力されているセルと空白セルが混在しているとします。 A列を参照して空白の場合、同行のB列に何らかの記号を出力する処理場合のコード (A列が空白でない場合B列には何も出力しない) どなた様かご教示いただけますと大変助かります。 よろしくお願いいたします。

  • VBAでセルが空白かどうかを調べたい(Excel)

    エクセル2000関連でVBAを勉強し始めました。 A1~C3まで列の名前が入っていて、 A2~C2列以下(データを入れるのはA3~C3, A4~C4・・で、どの行までデータが入っているかは 分からない状態)が空白か どうかを調べたい時にはどう書けばよろしいのでしょうか? ・A65536~C65536まで選択し ・上向きにデータが存在するかどうかを調べていって ・最終的にActiveになっている行番号が1であれば A2~C65536までは空白。 1じゃなければ、データがどこかに存在する。 という方法で調べようかと思ったのですが、 Dim Line As Integer Range("A65536:C65536").Select Range(Selection, Selection.End(xlUp)).Select  Line = Selection.Row でLineの値で判別しようかと思ったのですがうまく いきません。何が間違っているのでしょうか? また、より効率的な方法があったら教えていただき たいです。お願いします。

  • セルの選択

    エクセルで、マクロを作っています。 列の中に、数値がとびとびに入っている場合、数値の入っている最も下のセルはどのように選択すればいいのか教えてください。 Selection.End(xlDown).Select ↑では、空白になっているセルがあると、そこが選択されてしまうので、、、 お願いします。

専門家に質問してみよう