ここから質問投稿すると、最大10000ポイント当たる!!!! >>

A列が空白となるまでB列のとこどころに数字が入力されていて空白のセルへ0を入力する。
というマクロがどうしてもできないのですが、ご教示お願いします。

A 回答 (2件)

A1セルから対象データが入っているとして、


簡単に書くとこんな感じでしょうか。

Dim i As Long

 i = 1

Do Until Cells(i, 1).Value = ""

If Cells(i, 2).Value = "" Then
Cells(i, 2).Value = "0"
End If

i = i + 1

Loop

他にもパターンはいくつかありますが、これが一番シンプルだと思いましたので。
    • good
    • 0
この回答へのお礼

本当にありがとうございます。
簡単にできました。
この、Dimとifの使い方全く理解できないおバカで。
こんなに簡単にできるなんて本当に助かりました。

お礼日時:2011/07/01 14:41

ご質問文の内容が曖昧で判りづらいです。


>A列が空白となるまで
 ⇒A列の最終入力セルの事か?

>B列のとこどころに数字が入力されていて空白のセルへ0
 ⇒B列の空白セルに0を入力する事か?

>マクロがどうしてもできないのですが
⇒マクロ記録→B列を選択→ctrl+G→セル選択→空白セル→数式バーに0を入力→ctrl+enter
 標準モジュールのコードを参考にしたらどうでしょうか。

以下のコードはA列の最終入力セル範囲をアレンジしています。
Sub その1()
Range("B1:B" & Cells(Rows.Count, 1).End(xlUp).Row).Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.FormulaR1C1 = "0"
Range("A1").Select
End Sub
    • good
    • 0
この回答へのお礼

私も質問したあとにわかりづらいことに気付きました。
以後気をつけます。
No1の方がうまこと解釈してくれたので助かりました。
丁寧に教えて頂きありがとうございました。

お礼日時:2011/07/01 14:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAで空白セルにのみ数値を代入する方法

御伺いしたい事があります。
例えば
セルA2に何も数値が書かれていない空白状態ならば、VBAでだした数値を代入して終了。

もし空白で無いのならば、セルをA2から1つ下のA3で空白かどうかの判定をする(空白のセルが来るまで続ける)

といったように、積み上げ形式でどんどんセルを動きながら代入を行いたいのですが

これを行うには、どういったVBAでの記述が必要なのでしょうか?
よろしくお願いいたします。

Aベストアンサー

こういう感じで良いのでしょうか。

Private Sub SetVariableToBlankCell()
  Dim i As Integer

  For i = 1 To 65536
    If Range("A" & i).Value = "" Then
      Range("A" & i).Value = 100
      Exit For
    End If
  Next i
End Sub

QEXCEL・VBAで空欄の行に文字入力するには

ご教示お願いいたします。

エクセル2016にて、
・1行目にはタイトルが入っている。
・A列に日付が入っている(ファイルによって、10行~150行程度)
・B1には「種類」というタイトルが入っている。
・B2から下は空欄になっている。

B2~A列に日付が入っているB列の最後の行(ファイルによって、10行~150行程度)まで
「注文」という文字列を挿入したい。

この場合、どのようなマクロを書けば目的どおりに文字記入されますでしょうか?
どうぞよろしくお願いいたします。

Aベストアンサー

No.1です。

>「注文」という文字列をC列に挿入する場合は・・・
について

Sample1の場合は
>Range(Cells(2, "A"), Cells(lastRow, "A")).SpecialCells(xlCellTypeConstants).Offset(, 1) = "注文"

>Range(Cells(2, "A"), Cells(lastRow, "A")).SpecialCells(xlCellTypeConstants).Offset(, 2) = "注文"


Sample2の場合は
>Cells(i, "B") = "注文"

>Cells(i, "C") = "注文"

変更してみてください。m(_ _)m

Q【Excel】【VBA】空白のセルに上のデータを入力する方法

  A  B    C
1 山田 地下鉄  160 
2    地下鉄  150
3    タクシー 1120
4    地下鉄  150
5 鈴木 地下鉄  210
6    タクシー 5220

上記のようなデータがあり、VBAで別シートに
A2~A4までA1の山田が、A6にはA5の鈴木が
入った形でコピーしたいのですが、実現可能でしょうか?
よろしくお願いいたします。

Aベストアンサー

Dim i As Integer
Dim S As String
S = ""
For i = 1 To Range("B" & Rows.Count).End(xlUp).Row
If Cells(i, 1).Value = "" Then
Cells(i, 1).Value = S
Else
S = Cells(i, 1).Value
End If
Next i

Q[初心者です]VBAで指定列からAを検索し、発見したら隣のセルに値0を入れるマクロ。

VBAで指定列からAを検索し、発見したら隣のセルに0を入れるマクロを組みたいのですが、組み方がVBA初心者の為わかりません。
(例)
L列に、A、B、C、D、E、Fとランダムに文字が入っていて、
文字Aを検索し、発見したら隣のI列に値0を入れるというマクロです。

Sub Search()
Dim A As String
Set A = Worksheets("Sheet1").Cells.Find("A")
If A Is Nothing Then
ActiveCell.Offset(0, 1).Value = 0

End If
End Sub
と過去の質問で考えてみたのですが、Aがあった時、、、、
とコードが書けないです。
大変困っているので、ご教授頂けないでしょうか?
出来れば、そのままマクロに出来るコードを教えて頂けないでしょうか?
宜しくお願い致します。

Aベストアンサー

こんばんは。

#3さんのおっしゃっていることも、もっともなのですが、気になる点がありましたので、自分のことを踏まえて、書かせていただきます。

いずれ、また、同じようなケースが出会うと思います。こんな原則を考えてみたらどうでしょうか?それは、私も自身も同じなのですが、ワークシートのコマンドで行われるものは、記録マクロから作ってみるということです。他にも、「統合」とか、「置換」とか「オートフィルタ」「フィルタオプション」とかは、みんなパターンが決まっています。
その中の代表格が、この「Find」 です。

>Set A = Worksheets("Sheet1").Cells.Find("A")

>過去の質問で考えてみたのです

どうも、Find メソッドは、あるレベル以下の人は、省略する傾向があるようです。何が大事で、何が大事でないかというのは、やってみなければ分かりませんが、検索語だけを入れる書き方は、実務では、あまりしないほうがよいと思います。

だいたい、以下のTestFind2 ぐらいまでに、省略は、とどめたほうがよいです。

それは、Find は、必ずしも自分が思っているデフォルトとは違うことがあるので、「明示的(意図的に)」にオプションは入れたほうがよいです。
例えば、大文字小文字の違いを付けるなら、MatchCase:=True, 数式まで探すなら、LookIn:=xlFormulas

なお、Find メソッドは、5年経っても、たぶん完全に覚えられません。面倒なコードのひとつです。ですが、これはパターンが決まっているので、ひとつパターンが決まったら、それに当てはめればよいだけです。

#3さんで示されているMougのサンプルコードと似てはいるのですが、Mougのサンプルコードでは、Verionによって、失敗することがあります。

'--------------------------------------
'記録マクロをそのまま使う方法
Sub TestFind1()
Dim c As Range
 Set c = Columns("L:L").Find(What:="A", _
           After:=ActiveCell, _
           LookIn:=xlValues, _
           LookAt:=xlPart, _
           SearchOrder:=xlByRows, _
           SearchDirection:=xlNext, _
           MatchCase:=False, _
           MatchByte:=False, _
           SearchFormat:=False)
 c.Offset(0, 1).Value = 0
End Sub
'--------------------------------------
'TestFind1 をアレンジしてみる
Sub TestFind2()
Dim c As Range
'検索語
Const MYTXT As String = "A"
 Set c = ActiveSheet.Columns("L:L").Find(What:=MYTXT, _
           LookIn:=xlValues, _
           LookAt:=xlPart, _
           MatchCase:=False)
 If Not c Is Nothing Then
    c.Offset(0, 1).Value = 0
 End If
End Sub

'---------------------------------------
'複数ある場合(パターンを使った方法)
'---------------------------------------
Sub TestFind3()
  Dim c As Range
  Dim FirstAdd As String
  Const MYTXT As String = "A"
  Set c = ActiveSheet.Columns("L:L").Find( _
    What:=MYTXT, _
    LookIn:=xlValues, _
    LookAt:=xlPart, _
    MatchCase:=False)
  
  If Not c Is Nothing Then
    FirstAdd = c.Address
    Do
      c.Offset(, 1).Value = 0
      Set c = ActiveSheet.Columns("L:L").FindNext(c)
      If c.Address = FirstAdd Then Exit Sub
    Loop Until c Is Nothing
  End If
End Sub

こんばんは。

#3さんのおっしゃっていることも、もっともなのですが、気になる点がありましたので、自分のことを踏まえて、書かせていただきます。

いずれ、また、同じようなケースが出会うと思います。こんな原則を考えてみたらどうでしょうか?それは、私も自身も同じなのですが、ワークシートのコマンドで行われるものは、記録マクロから作ってみるということです。他にも、「統合」とか、「置換」とか「オートフィルタ」「フィルタオプション」とかは、みんなパターンが決まっています。
その中の代表...続きを読む

Q選択範囲の空白セルに0を入れるマクロ

Private Sub CommandButton1_Click()
If Cells("選択範囲").SpecialCells(xlcellTypeblank).Select Then
Range("選択範囲").Value = 0
End If

End Sub

このマクロを作成したのですが、動きません。
どこが、おかしいのでしょうか?

Aベストアンサー

こんばんは。

実際にやってみましたが、考えていたよりも遥かにむつかしいですね。
このSpecialCells のコードのレベルは、意外にも、かなり上級になってしまうかもしれません。今回は、便宜的に使います。

確かに、記録マクロで作れるレベルですが、思わぬ落とし穴が一杯あります。

私が、最初に考えていたコード(BlankToZero)

・VBAでは、本来は、なるべく、ワークシートの「名前-定義」は、あまり使わないほうがよいです。「名前-定義」がエラーでもぐりこんでしまうと、VBAでは触れられなくなってしまいます。

・SpecialCells(xlCellTypeBlanks)は、以下のような、エラートラップ必要です。

(1)

Sub BlankToZero()
Dim r As Range
'SpecialCells のブランク探しは、エラートラップが必要です
On Error Resume Next
'名前-定義でつけられたもの,オブジェクトの中にシート情報があるので、芳しくない
Set r = Range("選択範囲").SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If Not r Is Nothing Then
  r.Value = 0
End If
'オブジェクトの開放
Set r = Nothing
End Sub


しかし、これでは、本当に成功はしません。それは、SpecialCells は、あくまでも、UsedRange の範囲しか受けつけてくれませんので、いくら、「名前-定義」があっても、正しく、「0」は入らない時があります。

したがって、どうやら、.SpecialCells(xlCellTypeBlanks) は、万能ではなさそうです。(うまくいく場合は、あくまでも、UsedRangeに、その範囲が入っている場合のみです)

以下のようなものからやってみてください。なるべく、ワークシートで使われるメソッドは、ミスやトラブルが多いので、実践を何度も積んでからのほうがよいです。私は、今回は、たまたま気がついただけです。

次が改良型(BlankToZeroRvs)

'標準モジュールのみ

Sub BlankToZeroRvs()
Dim c As Variant
'画面を更新させないと、処理スピードが劇的に速くなります
Application.ScreenUpdating = False
For Each c In Range("選択範囲")
 If IsEmpty(c) Then
   c.Value = 0
 End If
Next c
Application.ScreenUpdating = True
End Sub

こんばんは。

実際にやってみましたが、考えていたよりも遥かにむつかしいですね。
このSpecialCells のコードのレベルは、意外にも、かなり上級になってしまうかもしれません。今回は、便宜的に使います。

確かに、記録マクロで作れるレベルですが、思わぬ落とし穴が一杯あります。

私が、最初に考えていたコード(BlankToZero)

・VBAでは、本来は、なるべく、ワークシートの「名前-定義」は、あまり使わないほうがよいです。「名前-定義」がエラーでもぐりこんでしまうと、VBAでは触れられなくな...続きを読む

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。

以下のようなプログラムをVBAで作成したいと考えています。

A1のセルに値があれば、その値をB1に返す。
次にA2のセルに値があれば、その値をB2に返す。
A行に値がある一番下のセルまで同じようなことをさせたいと考えています。

VBAは初心者です。
どなかた宜しくお願い致します。

Aベストアンサー

#2さんと似たものですが・・・・参考にしてください。

Sub test001()
Dim i As Long
i = 1
Do While Cells(i, 1) <> ""
Cells(i, 2) = Cells(i, 1)
i = i + 1
Loop
End Sub

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング