• ベストアンサー

エクセル VBA

最終行から順番に下へ同列で入力するVBAを教えて下さい。 EXCELのVBAで教えて下さい。 シート1のA列にはB列が入力されると自動入力されるNo.があり、C~G列もB列が入力されると自動入力されます。 B列には日付が、H列には3~4桁の数字が入力したいのですが、 入力行は必ず最下行のセルB、Gな為、VBAでフォームを作成し、 入力実行ボタンを押すことにより、最下行のセルB、Gに反映されるように したいです。 又、上記入力後に、シート2のH~N列をコピーして、シート3のA~G列に値のみの貼り付けを行い保存した後、シート3のA~G列をコピーして csvファイルを作成して保存したいです。 一連の流れを、フォームの入力実行ボタンを押すことで実行したいのですができるのでしょうか? 宜しく御願い致します。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

初めの部分はデータの取得方法が不明ですが、書き込むセルの出し方の参考です。 ⇒書き込むのはB列とH列ではないのかな??? Dim i As Long i = Worksheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).Row 'B列の最終行 ' B列の最終行の次のセル Cells(i + 1, "B").Value = "フォームから値を取得" ' 上と同行のH列のセル Cells(i + 1, "H").Value = "フォームから値を取得" 次の質問はマクロの自動記録でもコードを得られるかも。

kkk777
質問者

補足

御回答有難うございます。 追加の質問ですが、この場合のフォームの作成方法は、VBEでおこなうのでしょうか? 方法、やり方がわかりません。 以上、宜しく御願い致します。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

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

VBAでとして、3つぐらい方法が考えられる。 (1)シートの値の変化を捉えて(Changeイベントで)セルに入力する (2)シートにテキストボックスを1つ設ける方法 (3)ユーザーフォームを設け、そこにテキストボックスを1つ儲け そこに、入力した値をセルにセットする方法。 (4)データーフォームのShowDataFormを使う。VBAでです。 この方法は、VBAで自分の好きなように扱いにくいと思う。 -- それぞれは連続セルに入力する前提で、手動ではセル選択しない前提とする。 (1)はあまりメリットがない。入力すると自動で下の行を指してくれる。自動化は最初の Worksheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).Activate ぐらいしか生きない。 ここでは(2)を紹介する。 Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then Worksheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).Activate Worksheets("Sheet1").TextBox1.Activate ActiveCell = TextBox1.Text 'ActiveCell.Offset(1, 0).Select TextBox1.Text = "" Worksheets("Sheet1").TextBox1.Activate End If End Sub 初めだけTextBox1内をクリックすること。 データの最後はENTERキーを押す。 上記はB列にデータをセットする固定だが、G列にも使えるようにするには、 Worksheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).Activate を省き、'ActiveCell.Offset(1, 0).Selectを生かすとできる。 ーー 理解している自分で入力をやる分にはよいが、上記の注意事項の事を伝えるには、留意事項の解説文字文が必要であろう。 (3) Sub test03() UserForm1.Show (vbModeless) End Sub Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then Worksheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).Activate UserForm1.TextBox1.SetFocus ActiveCell = UserForm1.TextBox1.Text 'ActiveCell.Offset(1, 0).Select TextBox1.Text = "" UserForm1.TextBox1.SetFocus End If End Sub かな。危なっかしい点はあるかも。 ==== 質問文について >EXCELのVBAで教えて下さい。 シート1のA列にはB列が入力されると自動入力されるNo.があり、C~G列もB列が入力されると自動入力されます。 は質問の本筋に関係なく、不要。 >又、上記入力後に、シート2のH~N列をコピーして、シート3のA~G列に値のみの貼り付けを行い保存した後、シート3のA~G列をコピーしてcsvファイルを作成して保存したいです。 別質問内容が適当。 ーー この質問問題は結構難しかった。 この質問は丸投げの質問で(禁止されている)、質問の表現振りからすると、質問者には難しい課題ではないかな。

kkk777
質問者

お礼

御回答有難うございました。 丸投げの質問になっているとはきづきませんでした。 もうしわけありませんでした。 これからも、宜しく御願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

No2です。 補足にある件と類似した質問があったような感じもしましたが、 検索し切れてませんでした。 CSV カンマ区切り で保存すると互換性がない機能が含まれると表示されます http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1217707147 の回答にあるような事なのでしょうかね。 たぶんデスクトップとノートで使用されているセルの書式データ(フォントなど)に 違いがあり、アラートの有無が決まっているのかもしれません。

kkk777
質問者

お礼

大変参考になりました 有難うございました。 これからも宜しく御願い致します。

kkk777
質問者

補足

もうひとつ質問があります。 フォームに入力する日付は大体が当日の日付なので、 デフォルトで今日の日付がフォームに入力されるように したいのですができるのでしょうか? 固定ではないので修正が利けば便利なのですが・・・ 以上、宜しく御願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

No1です。 >追加の質問ですが、この場合のフォームの作成方法は、VBEでおこなうのでしょうか? フォームというのがユーザーフォームの事ならVBEで作成します。 ユーザーフォームの作り方 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_080.html ご参考まで。

kkk777
質問者

補足

大変よくわかりました。 ありがとうございました。 マクロの自動保存でシート2のH~N列をコピーして、シート3のA~G列に値のみの貼り付けを行い保存した後、シート3のA~G列をコピーして csvファイルを作成して保存はできたのですが、実行すると、 csvファイルを保存する際に何度もアラート(csvに互換性のない・・・)がでてくるのですが、一度保存を実行したらその後はアラートがでないようにする方法はありますか? デスクトップPCで保存するとでないのですが、ノートPCで保存を行うと出てしまいます。 以上、宜しく御願い致します。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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で

    EXCEL VBAで シート1のA2~G2までの列にA,B,C,D~と題名があり、それぞれの下の行には数字が並んでます。シート2のA2~G2までの列にもA,B,C,D~と題名がありますが、ランダムに並んでます。シート1のAの行を、シート2のAの行に、BにはBへという風にコピーをさせるにはどのようにすればよいでしょうか。またシート1A~Gのどれかが欠けている場合もあります。その場合はシート1にあるもののみコピーすることとします。 わかりにくいかも知れませんか、どうかよろしくお願いします。

  • ExcelのVBAにてキーになるものを入力してデータを振分けたい

    2つのシートがあり、sheet2に振分けるデータ(下表)を作成しておきます。   (列)  1   2   3  (行)   1     A   B   C  2     ○   △   ×  3     ア   イ    ウ (1)sheet1にコンボボックスにてAを入力する。A、B、Cは、それぞれ決められたセルにコピーされる。 (2)sheet1にコンボボックスにて○を入力する。○、△、×は、それぞれ決められたセルにコピーされる。 (1)と(2)のコピーされる場所は、同じ場所です。 というようなものをExcelのVBAにて作成したいのですが、VBAは、あまりよくわかりません。 宜しくお願い致します。

  • Excel VBAでの値の比較

    お世話になります。 Excel VBAでの値の比較方法についてご教授頂きたく存じます。 下記のような値がセルに入っていると仮定しまして、 セルA1とセルG1を比較する セルA2とセルG2を比較する セルB1とセルH1を比較する セルB2とセルH2を比較する 値が違う場合のみ、A列、又は、B列のセルの色を変更したいのですが・・・。 下記例の場合であれば、B1とA2がセルの色が変われば良いです。    A列 B列    G列 H列 1行  1  1     1   2 2行  2  2     3   2 VBAで実現したいと思います。 何卒、宜しくお願い申し上げます。

  • VBAの

    VBAで特定の列で文字マッチングをして、ヒットした行をシートAからシートBにコピーしたいと考えています。 単にセルの値を全コピーするだけなら可能です。しかし、このときにシートAが何行、何列あるか分からない場合、可変長なシートAを特定の列で文字マッチングをして、シートBにコピーするためにはどのようにすればよいのでしょうか?

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

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

  • エクセル:マクロの起動条件

    お世話になります。 以下の条件でのマクロを起動する方法、及びそのマクロを教えてください。 《条件》 ブックを開いた時、あるシートのC列でデータが入っている最下行の行番号とA列のデータが入って最下行の行番号の差が100以下だった場合、マクロを実行する。 (なおC列の行番号の方が必ず大きいです) ちなみに実行したいマクロは1~6の手順です。 1.ブックを開いたとき 2.「入力用」という名前のシートのC列でデータが入っている最下行の行番号とA列のデータが入っている最下行の行番号の差が100以下だった場合 3.「入力用」というシートにかかっているシートの保護をはずし 4.データが入っているC列の最下行のA~Z列を選択して、50行分 下にコピーする。  (例えば、C列の最下行が350行の場合、A350~Z350まで を選択したあと400行まで下にコピーする。) 5.再度シートの保護をかけ 6.A列でデータが入っている最下行の1つ下のセルを選択する ちなみに、2の条件に当てはまらないときはマクロを実行しません。 またC列の最下行よりA列の最下行が大きい数字になることはないはずですが、もし同じかA列の方が大きい場合、「エラー:C列よりA列が大きくなっています」と画面に表示させたい。 なお、行番号の差:100、選択するA~Z行、50行分下にコピー は変わる可能性があるので、修正する場合どの部分を修正すればよいかも教えてください。 よろしくお願いします。

  • Excel VBA

    Excel VBAについて シート1にはデータが入ってます。 G列に日付、L列に商品名、N列に件数。 シート2には集計結果を入力したいです。 セルB2に、日付が10月1日から15日までで、商品名がAの件数の合計。 セルB3は、日付が10月16日から末日まで、セルB4は、日付が11月1日から15日までと半月毎に集計を半年後の末日まで繰返し、B2の数行下には、商品名Bの集計行を作り、その数行下には商品名Cの集計行を作りたいです。 これまでは関数SUMIFSで集計していましたが、複数店舗分のシートの更新・メンテナンスが大変なので、VBAでの集計を考えいろいろ調べてるのですが、方法が思い付かないので、ご教授ください。

  • 【エクセル】新しいブックにコピーするVBA

    急ぎで必要で、困ってます。 ”一覧”と”原本”という2つのシートがあります。 ”一覧”シートのA55~H78には、最大24個の商品の情報が縦に入力されています。 A列はメーカー名、B列は商品名・・・H列はフラグ(”0”か”1”のどちらか) ”原本”シートは1商品1枚の注文書みたいなものです。 G13に商品名、G16にメーカー名・・・といった情報を入力する欄が設けられています。 そのエクセルに対し、以下の処理を実行してくれるVBAを作りたいです。 新しいブックを開き、そこに”原本”シートをコピーする。但し、以下の条件がある。 ・”一覧”シートのH列のフラグが ”1”と入力されている商品の情報が入力されている状態の  ”原本”シートが新しいブックにコピーされる様にしたい。 例えば、”一覧”シートに、以下の情報が入力されているとします。 A55=株式会社斎藤 B55=鈴木チョコ ・・・ H=1 ↓ Hが1なので、G13=鈴木チョコ、G16=株式会社斎藤と入力されている”原本”シートを 新しいブックにコピーします。 この処理を繰り返して、H列に”1”と入力されている情報分の”原本”シートが 新しいブックにコピーされる様にしたいです。 以上、丸投げになってしまうので、大変恐縮なのですが、分かる方がいましたら返信お願いします。

  • 急!!Excel VBA 転記マクロを教えて下さい

    Excel VBA超初心者です、 急ぎ作らなければならない資料があり、ご助力願います。 次の様な転記するアクションをコマンドボタンに設定したいです。 Sheet1の列A(先頭セルA2)に入力したデータを、 追加した(入力間違い等を除き、保存した)データ分だけ Sheet2の列B(先頭セルB3)の最終行から転記させていく。 列Aに入力したデータは、並び替えをするので (この分は、今回のVBAに含みません。入力・転記後、Sheet1で普通に並び替えをします。) 列Aと列Bのデータの順番が異なる。 以上です。 どうぞ宜しくお願いします。

明日のオールカマー予想
このQ&Aのポイント
  • 明日のオールカマーは牝馬が有力。グローリヴェイズやウインキートスなど注目
  • 骨折開けのキングオブコージや手術明けのウインマリリンは軽視
  • 明日のオールカマーから回答。印の強弱と推奨理由をお願いします
回答を見る

専門家に質問してみよう