- ベストアンサー
エクセル 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ファイルを作成して保存したいです。 一連の流れを、フォームの入力実行ボタンを押すことで実行したいのですができるのでしょうか? 宜しく御願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
初めの部分はデータの取得方法が不明ですが、書き込むセルの出し方の参考です。 ⇒書き込むのは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 = "フォームから値を取得" 次の質問はマクロの自動記録でもコードを得られるかも。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
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ファイルを作成して保存したいです。 別質問内容が適当。 ーー この質問問題は結構難しかった。 この質問は丸投げの質問で(禁止されている)、質問の表現振りからすると、質問者には難しい課題ではないかな。
お礼
御回答有難うございました。 丸投げの質問になっているとはきづきませんでした。 もうしわけありませんでした。 これからも、宜しく御願い致します。
- n-jun
- ベストアンサー率33% (959/2873)
No2です。 補足にある件と類似した質問があったような感じもしましたが、 検索し切れてませんでした。 CSV カンマ区切り で保存すると互換性がない機能が含まれると表示されます http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1217707147 の回答にあるような事なのでしょうかね。 たぶんデスクトップとノートで使用されているセルの書式データ(フォントなど)に 違いがあり、アラートの有無が決まっているのかもしれません。
お礼
大変参考になりました 有難うございました。 これからも宜しく御願い致します。
補足
もうひとつ質問があります。 フォームに入力する日付は大体が当日の日付なので、 デフォルトで今日の日付がフォームに入力されるように したいのですができるのでしょうか? 固定ではないので修正が利けば便利なのですが・・・ 以上、宜しく御願い致します。
- n-jun
- ベストアンサー率33% (959/2873)
No1です。 >追加の質問ですが、この場合のフォームの作成方法は、VBEでおこなうのでしょうか? フォームというのがユーザーフォームの事ならVBEで作成します。 ユーザーフォームの作り方 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_080.html ご参考まで。
補足
大変よくわかりました。 ありがとうございました。 マクロの自動保存でシート2のH~N列をコピーして、シート3のA~G列に値のみの貼り付けを行い保存した後、シート3のA~G列をコピーして csvファイルを作成して保存はできたのですが、実行すると、 csvファイルを保存する際に何度もアラート(csvに互換性のない・・・)がでてくるのですが、一度保存を実行したらその後はアラートがでないようにする方法はありますか? デスクトップPCで保存するとでないのですが、ノートPCで保存を行うと出てしまいます。 以上、宜しく御願い致します。
補足
御回答有難うございます。 追加の質問ですが、この場合のフォームの作成方法は、VBEでおこなうのでしょうか? 方法、やり方がわかりません。 以上、宜しく御願い致します。