• ベストアンサー

最終行から順番に下へ同列で入力するVBAを教えて下さい。

EXCELのVBAで教えて下さい。 セルA1に東京、A2に名古屋、A3に大阪と入力されています。 マクロのボタンにVBAの実行を割当て、ボタンを押す度にA1の東京がC5に、A2の名古屋がD5に、 A3の大阪がE5に入力され、更にA2又はA3のセルが空白でも必ず一行ずつ同じ行に入力されるにはどうしたら良いでしょうか? 例:入力の流れ  A    B    C    D    E    F   G・・・・・・ 1東京 2名古屋 3大阪 4 5          東京  名古屋 大阪 6          東京  名古屋 大阪 7 8 ・ ・ ・            ↓    ↓    ↓  A    B    C    D    E    F   G・・・・・・ 1東京 2 3大阪 4 5          東京  名古屋 大阪 6          東京  名古屋 大阪 7          東京        大阪 8 9 ・ ・            ↓    ↓    ↓  A    B    C    D    E    F   G・・・・・・ 1東京 2名古屋 3 4 5          東京  名古屋 大阪 6          東京  名古屋 大阪 7          東京        大阪 8          東京  名古屋 9 ・ ・         ※ポイント ・          セルD7を飛ばしてD8に入力される。            必ず一行ずつ同じ行に入力する。            EXCELを再起動しても入力セルの下から            続いて入力される。

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

わかり安いコードで Sub ボタン1_Click() Myrow = Range("C65536").End(xlUp).Row + 1 Cells(Myrow, 3).Value = Range("A1").Value Cells(Myrow, 4).Value = Range("A2").Value Cells(Myrow, 5).Value = Range("A3").Value End Sub これだけでは、ダメでしょうか。 A1の値は必ず必要(空白なし)A2,A3は空白でもOKです。

masa2832
質問者

お礼

本当に解りやすいコードで助かります。ポイントは、入力元となるセルを自由に選択できることが大変便利です。実際に使用するシートでは、入力元となるセルが20セルほどバラバラに点在しています。大変勉強になりありがとうございました。早速使用させていただきます。

その他の回答 (3)

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

ロジック的に少しややこしかった。しかしコード数は少なく出来たと思う。 Sheet1にコマンドボタンを1つ貼り付ける。 そのシートの「ボタンのクリックイベント」に ーー Private Sub CommandButton1_Click() d1 = Range("A65536").End(xlUp).Row 'A列最下行の取得 md2 = 5 'C5から開始のため For k = 3 To 20 'B-T列内で最下行の取得 d2 = Cells(65536, k).End(xlUp).Row '各列での最下行 If d2 > md2 Then md2 = d2 '最大行の入れ換え Next k '--縦方向のものを横方向に並べ替え For i = 1 To d1 Cells(md2 + 1, 3 + i - 1) = Cells(i, "A") Next i End Sub T列は一例なので、A列の最大入力許容行数+2までの列を見繕うこと。

masa2832
質問者

お礼

ユーザーフォームに貼りつけました。たくさんの列に貼り付けする場合に、簡単に範囲を指定できることが大変便利です。大変勉強になりありがとうございました。早速使用させていただきます。

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

SpecialCells(xlCellTypeLastCell)は思った様な動作をしない事があるので、別の方法を取ってみましたが、#1さんと考え方は同じですね。 Sub test() Dim lastRow As Long, i As Long Dim targetRange As Range With ActiveSheet lastRow = Application.WorksheetFunction.Max(Range("c" & .Rows.Count).End(xlUp).Row, Range("d" & .Rows.Count).End(xlUp).Row, Range("e" & .Rows.Count).End(xlUp).Row) End With If lastRow = 1 Then lastRow = 4 Set targetRange = Range("c" & (lastRow + 1)) For i = 1 To 3 targetRange.Offset(0, i - 1).Value = Range("a" & i).Value Next i End Sub

masa2832
質問者

お礼

入力範囲と入力開始行を指定できることは、大変便利です。大変勉強になりありがとうございました。早速使用させていただきます。

回答No.1

求めている物ではないかもしれませんが、参考にしてください。 --------------------------------------------------------------------- Sub Kakikomi() Dim MaxCnt As Long, MaxRow As Long, C As Integer  'A列の最下行を取得  MaxCnt = Range("A65536").End(xlUp).Row  '書き込みされたデータの最下行を取得  MaxRow = 4  For C = 3 To 5   If MaxRow < Cells(65536, C).End(xlUp).Row Then MaxRow = Cells(65536, C).End(xlUp).Row  Next C  MaxRow = IIf(MaxRow = 4, 5, MaxRow + 1)  '書込  For C = 1 To MaxCnt   Cells(MaxRow, C + 2).Value = Cells(C, 1).Value  Next C End Sub ---------------------------------------------------------------------

masa2832
質問者

お礼

A列に大量のデータがあるシートから抽出して、定期的に貼りつける場合にとても便利です。大変勉強になりありがとうございました。早速使用させていただきます。

関連するQ&A

  • VBAで色の付いているセルの行削除

    VBAで色の付いているセルの行を削除することは出来ないでしょうか? 量が多すぎて一つ一つ削除すのは大変で間違えて削除してしまいそうなので・・・ - 文字または数字 ■ 色の付いたセル(赤)  A B C D E F・・・ 1- - - - - - 2- - - - - - 3- - - ■ - - 4- - ■ - - - 5- - ■ - - - 6- - - - - - 7- - - ■ - - 8- - ■ - - - 9- - ■ - - - 10- - - - - -       ↓  A B C D E F・・・ 1- - - - - - 2- - - - - - 6- - - - - - 10- - - - - - よろしくお願いします。

  • エクセル:未入力の行は合計を非表示にしたいのですが。

    未入力の行は合計を非表示にしたいのですが。教えていただけませんか? - A B C D E F(残高計)*Aは仕入でB~Eは売上個数です。 1 9 1 2 1 1 4(=A1-B1-C1-D1-E1)になっています。 2 8 1 2 1 1 7(=F1+A2-B2-C2-D2-E2)です。 3 - - - - - 7(G2をコピーすると未入力行には7が。。) 4 - - - - - 7(これを表示しない方法はありますか?) 5 - - - - - 7(すみません。教えてください。。。) 分かりにくいかもしれませんが、何卒、よろしくお願いもうしあげます♪♪。

  • エクセルで1行に1データ以上入力されたらエラー表示

    A1からG1の行で7つのセルがありますが、 その行で1データ以上入れたらエラー表示させることは出来ますか? 例えば A1にデータを入れたらB1・C1・D1・E1・F1・G1にはデータは入れられない。 D1にデータを入れたらA1・B1・C1・E1・F1・G1にはデータは入れられない。 という感じです。 どうぞよろしくお願いします。

  • エクセルで空白セルを寄せたい

    エクセル2002使用です VBAは使わずに関数だけで空白セルがあるセルを詰めて表示したいのですが・・・   A|B|C|D|E|F|G 1 あ い う え お か き 2 ○   ○ ○   ○ の表を   A|B|C|D|E|F|G 1 あ う え か  2 ○ ○ ○ ○ のように表を書き換えたいのです。 1行目には必ず文字が入力されています。 2行目には入力されているセルと空白セルが不定期に入力されています。 2行目のセルが空白ならば、1行目のセルも削除して左へ詰めて 表を転記したいのです。 よろしくお願いします。

  • Excel VBA B列を検索して1行下をコピぺ

    はじめまして。 VBAを始めたばかりですが、自分ではどうにもならないので、教えていただければと思い、初めて質問致します。 A1~G1、1行目から1000行目まで各セルに数字がランダムに1つずつ入っているデーターSheet1があり、コマンドボタンを押すことによってMsgBoxに入力した数字をB列を下に検索していき、例えば、数字の8が入力されたら、B1から下にB列に8が出現したらそのセルの1つ下の行(A列~G列まで)をコピーしてSheet2に抽出したいと考えているのですが、なかなか出来ず、困っています。 イメージとして A B C D E F G H I 1 5 14 30 25 30 3 9 2 22 34 6 7 29 49 3 3 1 8 20 4 10 6 45 4 30 15 34 50 2 5 9 5 11 8 45 7 6 20 1 6 40 8 48 25 36 4 10 7 21 22 30 28 6 7 36 8 2 3 50 2 1 43 6 と、データがSheet1に仮にあって、8が入力されたなら4行目の 30 15 34 50 2 5 9 と 6行目 40 8 48 25 36 4 10、7行目 21 22 30 28 6 7 36という様に抽出されてSheet2に 上から順に貼り付けられる様にしたいので、皆様の御知恵をお貸しいただければと 思っております。かなり複雑かとは思いますが、どうか宜しくお願いいたします。 FINDやOFFSET、IF文、ループ等を使ってみましたが私のレベルでは全く話になりませんでした。 まだVBAかけだしなもので、なるべ簡単なくプログラムでお願いいたします。

  • EXCEL VBA 行の値を累計したいのですが・・

    VBA初心者です。 VBAでEXCELの行の値を累計したいのですが、プログラムの仕方がわかりません。 どなたかわかる方教えてください。     A    B   C    D   E ・・・・ 1  1000 3000 2000 4000 3000  2  2000 5000 1000 3000 2000  3  4000 2000 3000 1000 5000   :     実行結果     A    B    C    D    E  ・・・・ 1  1000 4000 6000 10000 13000 2  2000 7000 8000 11000 13000   ←行の値の累計 3  4000 6000 9000 10000 15000 : 行と列はたくさんあって、最後のセルまで累計する方法を教えていただけるとありがたいです。 どうぞよろしくお願いします。m(_ _)m

  • 同列に文字入力があるまで隣列の個数を合計

    excelシートに以下のような表があり別表に下記項目に基づき合計値を入力したい。 1. I3セルにD列項目「あ」のうちB列記号「A+B+C」のF列個数合計を入力 2. J3セルにはD列項目「あ」のうちB列記号「D」のF列個数合計を入力 3. I4セルにD列項目「い」のうちB列記号「A+B+C」のF列個数合計を入力 4. J4セルにはD列項目「い」のうちB列記号「D+E」のF列個数合計を入力 以下続くのですが関数もしくはVBAコードが解る方宜しくお願いします。

  • アクティブセルの行のセルを複数指定選択-VBA

    アクティブセルの行のセルを複数指定選択-VBA コマンドボタンを押すとアクティブセルのある行のセルを個別に選択したいのですが、どのようにVBAにコードを入力すればいいのか悩んでいます。 例:選択したい列(セル)A:C,F:I アクティブセルがA2にある時、コマンドボタンを押してA2,B2,C2,F2,G2,H2,I2を選択する。   アクティブセルがA10にある時は、A10,B10,C10,F10,G10,H10,I10を選択する。 ご回答お待ちしています。宜しくお願い致します。

  • VBA 最終行の日付を求める

    VBA初心者です。 最終行の日付を求める方法を教えて下さい。 以下のような場合、2009年3月1日 そしてその結果を別のセル(例えばD1セルとか)に出力する方法もお願いします。 ---------  A列  B列 C列  2009  1  1 2009  2  1 2009  3  1

  • エクセル最終行の下に貼り付け

    VBAで以下の作業を教えて下さい。 Sheet1のB列に入力済みのセルが何行かあります。 その入力済みのセルの値をコピーして、Sheet2のA列の入力済みの最終行のすぐ下の行に貼り付ける。 *Sheet1のB列の入力済みのセルの行数は毎回変わります。 *Sheet2のA列には一番最初は何も入力されていない状態です。 宜しくお願い致します。

専門家に質問してみよう