Excelのセルに値を順番に入力する方法

このQ&Aのポイント
  • Excelのセルに順番に値を入力する方法を教えてください。
  • A列に値があり、B列には一部空欄セルがあります。B列の空欄セルに、上から順番にA列の値を入力したいです。
  • 現在の記述ではうまくいかず、正しいコードがわかりません。良い方法を教えてください。
回答を見る
  • ベストアンサー

空欄セルに順番に値を入力したいのですが

すみません、誰か教えて頂けませんでしょうか? A列に値がありB列に所どころ空欄セルがあります。そのB列の空欄セル の上からA列の値を上から順番に値を入れたいのですがうまくいきません。 何か良い方法を教えて頂けませんでしょうか?     A    B 1    23    5 2    21 3    26    8 4    3 5    6    7 6    0 7    0 8 9 10 このような値を下記の様にしたいと思っています。     A    B 1   23    5 2    21    23 3    26    8 4    3    21 5    6    7 6    0    26 7    0    3 8        6 9 10 下記の様に記述はしたのですが、全然的外れでした。 For m = 1 To 10 For n = 1 To 10 If .Cells(n, "A").Value <> 0 And .Cells(m, "B").Value = "" Then .Cells(m, "B").Value = .Cells(n, "A").Value End If Next n Next m

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

sub macro1()  dim h as range  dim i, j, n, z  z = application.countif(range("A:A"), ">0")  do  ’A列を上から順に調査   do    i = i + 1   loop until cells(i, "A")>0  ’B列の空白を上から順に調査   do    j = j + 1   loop until cells(j, "B") = ""  ’転記   cells(j, "B") = cells(i, "A")   n = n + 1  loop until n = z end sub

konekos
質問者

お礼

回答頂き有難うございます。 すみません、もう一つ教えて頂きたいのですが、変数hをrange で宣言しているのは、どのような意味なのでしょうか? 教えて頂けないでしょうか?

その他の回答 (4)

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

例データ と結果(元は*のB列行が空白) A B 23 5 21 23 * 26 8 3 21 * 6 7 1 26 * 2 3 3 3 * 4 5 ーー Sub test01() Dim cl As Range d = Range("a65536").End(xlUp).Row 'A列最終行 i = 2 Range("b2:B" & d).Select Selection.SpecialCells(xlCellTypeBlanks).Select '空白セル選択 For Each cl In Selection cl.Value = Cells(i, "A") '順にA列セルの上行からの値をセット i = i + 1 Next End Sub

konekos
質問者

お礼

imogasi様 有難うございます。とても参考になりました。

  • chonami
  • ベストアンサー率43% (448/1036)
回答No.4

あー、なるほど。 すみません、勘違いしてました…。

  • chonami
  • ベストアンサー率43% (448/1036)
回答No.3

C列にA列をコピーして貼り付け→B列をコピー→C列に貼り付け時、「形式を選択して貼り付け」の「空白セルを無視する」にチェックして貼り付け で如何でしょうか?

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

関数を使って対応することできます。 例えば作業列を使ってC1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(B1<>"",B1,IF(ROW(A1)>COUNTIF(A:A,">0")+COUNT(B:B),"",INDEX(A:A,COUNTIF(B$1:B1,"")))) C列にお求めの表示がされますがB列に表示したい場合にはC列を選択してコピーし、その後に形式を選択して貼り付けて「値」にチェックをして貼り付けます。 その後にC列を削除します。

konekos
質問者

お礼

KURUMITO様 有難うございます。確かに関数でもできました。 有難うございます。

関連するQ&A

  • *マクロのVlookで、参照先が空欄のときは、元々入力されている値をそ

    *マクロのVlookで、参照先が空欄のときは、元々入力されている値をそのまま表示するにはどうしたらよいのでしょうか* 質問です。下記のようなマクロをつくりました。仕組みはVLOOKと同じですが、 このようなコードを使用してVLOOKと同じ仕組みになるようにしました。 ちなみに、このマクロでは、MASTERという名前のシートを参照して、Sheet1という名前のシートに必要な文字を引っ張ってきます。 正確に言いますと、MASTERのA列と、Sheet1のB列が一致した場合、Sheet1のC列に値を導入する形になっています。 ところでこのとき、もしMASTERとSheet1に、一致したものがないと、Sheet1のC列には空欄が表示されてしまいます。一致する値がないときは、もともとC列に記入しておいた値を保持する、という設定にしたい場合、どのようにすればよいのでしょうか。 Sheet1のB列とMASTERのA列が一致すれば、Sheet1のC列に引っ張ってきた値を導入するが、一致しなければSheet1のC列にもともと記入してある文字を消さずにそのままにしたいのです。 初心者ですが、どなたか宜しくお願い致します。 Sub Macro1() For s = 2 To 70 '処理するSheet1の行数範囲 b = Sheets("Sheet1").Cells(s, 2) 'bにB列の値を代入 For u = 2 To 70 '検索する元データの行数範囲 If Sheets("MASTER").Cells(u, 1) = b Then 'MASTERのA列の値とSheet1のB列が一致した場合 w = Sheets("MASTER").Cells(u, 2) 'wにB列の値を代入 Sheets("Sheet1").Cells(s, 3).Value = w 'Sheet1のC列に値を入力 Exit For '値が見つかったのでForを終了 End If Next Next End Sub

  • セルを空欄にできますか?

    M列に0以上の数字が入力されたらA列の日付を変えるシートです B列の 毎日は +1日後 B列の 毎週は +7日後 下記がその計算式です。  アドインで「分析ツール」「分析ツール-VBA」のチェックを入れてWORKDAY関数 private sub Worksheet_Change(byval Target as excel.range)  dim h as range  on error resume next  for each h in application.intersect(target, range("M:M"))  if h > 0 then   select case cells(h.row, "B")   case "毎日"    cells(h.row, "A") = cells(h.row, "A") + 1   case "平日"    cells(h.row, "A") = application.run("ATPVBAEN.XLA!WorkDay", cells(h.row, "A"), 1)   case "毎週"    cells(h.row, "A") = cells(h.row, "A") + 7   case "隔週"    cells(h.row, "A") = cells(h.row, "A") + 14   case "毎月"    cells(h.row, "A") = dateadd("M", 1, cells(h.row, "A"))   case "隔月"    cells(h.row, "A") = dateadd("M", 2, cells(h.row, "A"))   end select  end if  next end sub ------------------ そこで 質問ですが B5 の 「-」が入ると A5が空欄になるなんて 可能ですか? 上記の式になんと追加すればいいのでしょうか?

  • Excelで同一セル内に入力されているデータを他のセルに分割したい

    http://okwave.jp/qa4369634.html?ans_count_asc=20 で質問をして、何度かやりとりをさせていただいて エクセルで同一セル内に、セル内改行で1~6列ほどのデータが入力されています。 縦にデータが入力されていて、それぞれのセルにセル内改行を含み、データが入力されています。 それぞれのセル内のデータを… 例えば、A1セル内に5行入力されていたら、A2セルから入力されている行数分(ここでいうと5行)挿入し、それぞれにデータを分割して入力させたい。 かつ、B・Cセルは増えたセルにそれぞれのデータをコピーしたいと言ったら、 Sub Macro1() Dim idx, cnt As Integer Dim wkStr() As String Dim rng As Range   ActiveSheet.Copy after:=ActiveSheet   For idx = Range("A65536").End(xlUp).Row To 1 Step -1     If InStr(Cells(idx, "A"), Chr(10)) > 0 Then       wkStr = Split(Cells(idx, "A").Value, Chr(10))       Set rng = Cells(idx, "B")       For cnt = UBound(wkStr) To 0 Step -1         Cells(idx, "A").Value = wkStr(cnt)         Cells(idx, "B").Value = rng.Value         Cells(idx, "C").Value = rng.Offset(0, 1).Value         If cnt > 0 Then           Cells(idx, "A").Resize(1, 3).Insert shift:=xlDown         End If       Next cnt     End If   Next idx End Sub といったマクロのご回答をいただきました。 これを元に、 ・データが入っているセルをA列→B列に変更 ・A列のデータはセルが増えた分だけ増やしたい ・A1に対応するデータがC1・D1に入っていた場合、対応するデータは残したまま、B列が増えただけ、列を増やしたい と変更したいのですが…。 すいませんが、宜しくお願い致します。

  • 上のセルのコピーのマクロについて

    下記コードで、B列(数値)の空白のセルにその上の値をコピーしているんですが、C列(日付)で行ったところ、できませんでした。 Integerが違うと思って変えたんですが、ほかにも関連して変えるところがありますか?? 宜しくお願いいたします。 Sub 上のセルコピー() Dim i As Integer For i = 1 To Range("B" & Rows.Count).End(xlUp).Row If Cells(i, 2).Value = "" Then Cells(i, 2).Value = Cells(i - 1, 2).Value End If Next i End Sub

  • エクセル2007 参照セルの値が認識されない

    エクセル2007の環境で下記マクロを実行すると、 アクティブシートのセルA1に数字が入っている場合、Sheet1のセルA1に値を転記しても そのセルA1の値をVLOOKUP関数で参照できません。 マクロに問題があるためなのか何処に問題があるのか分からないので教えてください。 宜しくお願いいたします。 【sheet】は アクティブシートの3行目から1000行目までのA列のセルをクリックしたらセルA1に値を表示 その後、下記【モジュール】を使用し、 アクティブシートのセルA1が空白の場合、 A列の数値をSheet1のセルA1に転記し、アクティブシートのA列の数値が空白になるまで循環する。 Sheet1のセルA1の値をVLOOKUP関数で参照した内容を表示、印刷します。 ----------------------------------------------------------------- '【sheet】 Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Target If .Count > 1 + IsEmpty(.Value) Then Exit Sub If Application.Intersect(.Cells, Range("A3:A1000")) Is Nothing Then Exit Sub ActiveSheet.Cells(1, 1).Value = .Value End With End Sub ----------------------------------------------------------------- '【モジュール】 Sub TEST() Dim myBtn As Integer Dim myMsg As String, myTitle As String Dim WS1 As Worksheet, WS2 As Worksheet Dim i As Long myMsg = "●●●" myTitle = "確 認" myBtn = MsgBox(myMsg, vbYesNo + vbExclamation, myTitle) If myBtn = vbYes Then Set WS1 = ActiveSheet Set WS2 = Sheet1 If WS1.Cells(1, 1).Value = "" Then With WS1 For i = 3 To 65536 If .Cells(i, 1).Value = "" Then Exit For WS2.Cells(1, 1).Value = .Cells(i, 1).Value WS2.Cells(1, 2).Value = ActiveSheet.Name 'WS2.PrintOut Copies:=1 Next i End With ElseIf WS1.Cells(1, 1).Value >= 1 Then WS2.Cells(1, 1).Value = WS1.Cells(1, 1).Value WS2.Cells(1, 2).Value = WS1.Name 'WS2.PrintOut Copies:=1 Else End If End If End Sub -----------------------------------------------------------------

  • 二つの行のうち、どちらかが、セルの値がゼロのとき、その列を非表示にする

    二つの行のうち、どちらかが、セルの値がゼロのとき、その列を非表示にする windows7 excelでマクロ作成中の初心者です。 以下のコードで27行目のセルの値が0のとき列を非表示にします。 Private Sub 列非表示_Click() Dim 列番号 As Long 'シートが保護されていたら保護を解除 Worksheets("最新明細").Activate If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If For 列番号 = 4 To 33 If Cells(27, 列番号).Value = 0 Then Cells(27, 列番号).EntireColumn.Hidden = True End If Next 列番号 ActiveSheet.Protect End Sub ------------------------------------------------- Private Sub 列表示_Click() Dim 列番号 As Long 'シートが保護されていたら保護を解除 Worksheets("最新明細").Activate If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If For 列番号 = 4 To 33 If Cells(27, 列番号).Value = 0 Then Cells(27, 列番号).EntireColumn.Hidden = False End If Next 列番号 ActiveSheet.Protect End Sub この27行と、もう一行の28行、どちらかの行が、0のときに列を非表示・表示したいのですが、出来ません。 試行錯誤してもできないのです。どうかよろしくおねがいします。 For 列番号 = 4 To 33 If Cells(27, 列番号).Value = 0 or Cells(28, 列番号).Value = 0 Then or( Cells(27, 列番号).EntireColumn.Hidden = True, Cells(27, 列番号).EntireColumn.Hidden = True) End If

  • VBA 値、セル操作

    お世話になります [現状] 実行させると 1列目を残して2列づつ処理をさせています Sub Macro1() Dim idxR, idxC, ptr As Integer Dim ws As Worksheet Set ws = ActiveSheet Worksheets.Add after:=ws ptr = 2 With ws .Rows(1).Copy Destination:=Range("A1") For idxR = 2 To .Range("A65536").End(xlUp).Row Cells(ptr, "A").Value = .Cells(idxR, "A").Value For idxC = 2 To 255 Step 2 If .Cells(idxR, idxC) = "" Then Exit For Else .Cells(idxR, idxC).Resize(1, 2).Copy Destination:=Cells(ptr, "B") ptr = ptr + 1 End If Next idxC Next idxR End With End Sub [判らないこと] 前7列を残して(A:G) 8列目から(H列)より9列づつ処理をさせたいのですが判らなく大変困っております。 どなたかご教授よろしくお願いします。

  • Activeセルの最終列の値を代入し、セル最終行までコピーするには

    最終列の値の代入をここで教えていただいてできました。 J = Range("IV2").End(xlToLeft).Column For i = J to 1 Step -1 If InStr(Cells(2, i).Value, "単価") > 0 Then Cells(3, i).Value = Cells(3, J).Value End If Next i この、Cells(3, i).Value = Cells(3, J).Value を、 "単価"列の最終行までコピーするには どのような記述をしたらいいでしょうか? しばらく悩んでいますができません。。。 お力を貸してください。!

  • VLOOKUP関数と同じことをVBAでおこなうには

     初めまして、当方VBAの素人です。よろしくお願いします。  同じような質問で、このようなVBAを見つけました。 Sub Macro1() For n = 2 To 5 '処理するSheet2の行数範囲 a = Sheets("Sheet2").Cells(n, 1) 'aにA列の値を代入 For m = 2 To 5 '検索するSheet1の行数範囲 If Sheets("Sheet1").Cells(m, 1) = a Then 'Sheet2のA列の値とSheet1のA列が一致した場合 v = Sheets("Sheet1").Cells(m, 2) 'vにB列の値を代入 Sheets("Sheet2").Cells(n, 2).Value = v 'Sheet2のB列に値を入力 Exit For '値が見つかったのでForを終了 End If Next Next End Sub このVBAではSheet2での検索、入力が列になるのですが、列でなく、行でできないでしょうか。できればSheet1のB列の値をSheet2の1行で検索、Sheet2の2行に入力されるだけではなく、Sheet1のC列の値をSheet3の1行で検索、Sheet3の2行に入力されるようにしたいと思います。  解る方、よろしくお願いします。

  • Excelセル範囲内の値のみ1行空欄にする

    下記コードでは1行づつ挿入により下段までずれてしまいます。 Excelセル範囲内の値のみ1行づつ開けるにはどのようにすれば良いでしょうか。 どなたか解る方よろしくお願いします。 Sub 空欄1行() Dim i As Long If TypeName(Selection) <> "Range" Then Exit Sub With Selection For i = .Rows.Count To 2 Step -1 Intersect(.Cells(i, 1).EntireRow, .Columns).Insert xlDown Next End With End Sub

専門家に質問してみよう