• 締切済み

EXCEL VBAで質問

N個の数値Aをセル(1,1)から下へセルへ順に 書き出す場合どういったプログラムになりますか? 考え方だけでもいいので教えてください。

みんなの回答

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

問題を読み直すと判り難い表現ですね。 >N個の数値Aをセル(1,1)から 「N個の」は数値Aに係るのか、 N個の「セル」に係るのか。 両方にかかるのか。 N個の別々の数値をN個のセルにセットするなら A=Array(1,2,3,4,5) For i=1 To Ubound(A) Cells(i,"A")=A(i) Next i

  • mk227
  • ベストアンサー率100% (3/3)
回答No.4

Range(Cells(1), Cells(N, 1)).Value = A これでA1セルからA列N行のセルに数値Aが書き込まれます。

  • diashun
  • ベストアンサー率38% (94/244)
回答No.3

diashun です。 Rangeオブジェクトを使う方法です。 セルに入力した値を使う方法もありますが、ここではユーザーインターフェースとして「InputBox」を使っています。 以下をVBAの標準モジュール(Module1)にコピーしてください。↓ ''ここから******************* Option Explicit Public Sub Macro1() Dim strStart As String Dim strCnt As String Dim strNum As String '最初のセルの位置(A1、B1 等)を指定する strStart = InputBox("最初のセルを入力して下さい。" & _ vbNewLine & "例: A1", "開始セル位置入力") '連続して入力するセルの個数を指定する strCnt = InputBox("セルの個数を入力して下さい。" & _ vbNewLine & "例: 15", "セル個数入力") '入力するセルの値(数値)を指定する strNum = InputBox("セルの値(数値)を入力して下さい。" & _ vbNewLine & "例: 100", "セル値(数値)入力") Call Fix_Value(strStart, strCnt, strNum) MsgBox "入力完了" End Sub Private Sub Fix_Value(strCell_Add As String, _ strCnt As String, _ strNum As String) Dim rR As Range Dim lCount As Long Dim lngRow As Long Dim lngCol As Long Dim lngCnt As Long Dim iNum As Integer Application.ScreenUpdating = False lngCnt = CLng(strCnt) iNum = CInt(strNum) '開始セルの行番号取得 lngRow = Range(strCell_Add).Row '開始セルの列番号取得 lngCol = Range(strCell_Add).Column 'Rangeオブジェクトを生成する Set rR = Range(Cells(lngRow, lngCol), _ Cells((lngRow + lngCnt) - 1, lngCol)) '指定したセルの個数分、「値(数値)」を自動入力する For lCount = 1 To lngCnt rR(lCount) = iNum Next lCount 'Rangeオブジェクトを破棄する Set rR = Nothing Application.ScreenUpdating = True End Sub ''ここまで******************** 注)入力値のチェックは行っていません。 以上

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

>どういったプログラムになりますか? >考え方だけでもいいので教えてください。 私は、2種類の方法を使い分けています。  その1:書き出し個数が少ない場合      DataOut1のように、セルに直接書き出します。  その2:書き出し個数が多く、処理時間を考慮する場合      DataOut2のように、値を配列に書き込み、一括してセルに書き出します。      処理スピードははるかに速くなります。 '// 繰り返し(値→セル) Sub DataOut1()   Const startNum As Long = 10000 '// 初期値   Const RowNum As Long = 60000  '// 書き出す総行数   Dim rw As Long         '// 行カウンタ      '// ■□■ セルに直接書く方法(増分1でA列に書く) □■□     For rw = 1 To RowNum       '// 指定する回数書き出す       Cells(rw, 1) = startNum + rw     Next End Sub '// 繰り返し(値→配列)→セル Sub DataOut2()   Dim Dt()            '// 書き出し用の配列      Const startNum As Long = 10000 '// 初期値   Const RowNum As Long = 60000  '// 書き出す総行数   Dim rw As Long         '// 行カウンタ   ReDim Dt(RowNum, 0)       '// 書き出す値      '// ■□■ 2次元配列を使う方法(B列に書く) □■□     For rw = 1 To RowNum     '// 配列に値を代入する(増分1)       Dt(rw - 1, 0) = startNum + rw     Next     '// 配列をセルに書く     Range(Cells(1, 2), Cells(RowNum, 2)) = Dt End Sub

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

Cells(i,j)=数値でi行目、J列目に数値をセットできます。 「下へセルへ順に」ということなので、For文でiを使えば良い。Step 1ですが略せます。 「セル(1,1)から」ですから、初期値は1で、For i=1 to になります。 「セル(1,1)から下へ」ですから、列の1は変化させません。 結局 For i=1 to 100 Cells(i,1)="a" Next i "a"の部分は、別途問題により、適当に考えることが必要です。

関連するQ&A

専門家に質問してみよう