EXCEL2000使っています。A列データがあるとして、A3セルに特定の数字(例えば1)があるときは、その上の行、このときは 2行に1行挿入したいのですが、各行ごとに挿入するのは大変なので、簡単に、できるだけ一度に挿入する方法はないですか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

#1です。

VBAで
Sub test01()
i = 1
p01:
If Cells(i, "A") = "" Then Exit Sub
If Cells(i, "A") = 1 Then
Cells(i, "A").Insert (xlDown)
i = i + 1
End If
i = i + 1
GoTo p01
End Sub
少数例テストでは上手く行きましたが。
データ行の中間に空白行がないこと。
If Cells(i, "A") = 1 Thenの1は、実際の場合の値に
変えてください。
元データのシートはコピーを取って、テストをしてください。編集の元に戻すが効かないと思いますから。
    • good
    • 0

エクセルでの方法は大別して


(1)操作で
(2)関数で
(3)書式設定・条件付書式・入力規則で
(4)備わったウイザード的操作(フィルタなど)
(5)VBAで
などに分かれると思います。
本件では(1)は面倒(3)(4)は該当せず対象外でしょう。
すると(2)での解決をお望みでしょうが
関数と言うものは、行挿入や削除や文字・セルの色づけは出来ません。値を対象にするものです。規則性があれば別シートのしかるべき行にデータを持ってきて、新表を作成できるケースはあります。
結局残るはVBAですが、お望みですか。

この回答への補足

是非ともお願いします。VBAも今勉強中です。

補足日時:2003/10/07 23:42
    • good
    • 0
この回答へのお礼

お返事が遅くなりました。できました。欲を言えば、B列からE列まで一度に挿入するってときはB:Eってやったらできなかったのですが、何か方法はないですか?

お礼日時:2003/10/14 09:34

このQ&Aに関連する人気のQ&A

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

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

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

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

Q■VBAで条件による行挿入方法

VBA初心者です。Excel2007、XPを使用しています。

A列からQ列、平均100行程度の顧客データがあります。

F列に型番(アルファベット+数字等)が記入されており、
その型番内に「半角もしくは全角スペース」が含まれている場合、
該当があった行の下へ、該当行をコピーした内容を追加したいです。

できれば、スペースがある数だけ挿入し、
かつ該当行、挿入行に色付け出来ればなお良いです。

ご教授頂けないでしょうか。
宜しくお願い致します。

Aベストアンサー

たびたびごめんなさい。

No.2のコードで無駄な行がありました。
↓のコードに変更してください。

Sub Sample3()
Dim i As Long, k As Long, str As String
For i = Cells(Rows.Count, "F").End(xlUp).Row To 2 Step -1
If InStr(Cells(i, "F"), "×") > 0 Then
Cells(i, "A").Resize(, 17).Interior.ColorIndex = 36
str = Replace(Cells(i, "F"), "×", "")
k = Len(Cells(i, "F")) - Len(str)
If k > 1 Then
Rows(i + 1 & ":" & i + k - 1).Insert
Cells(i, "A").Resize(, 17).Copy Cells(i + 1, "A").Resize(k - 1, 17)
End If
End If
Next i
End Sub

何度も失礼しました。m(_ _)m

たびたびごめんなさい。

No.2のコードで無駄な行がありました。
↓のコードに変更してください。

Sub Sample3()
Dim i As Long, k As Long, str As String
For i = Cells(Rows.Count, "F").End(xlUp).Row To 2 Step -1
If InStr(Cells(i, "F"), "×") > 0 Then
Cells(i, "A").Resize(, 17).Interior.ColorIndex = 36
str = Replace(Cells(i, "F"), "×", "")
k = Len(Cells(i, "F")) - Len(str)
If k > 1 Then
Rows(i + 1 & ":" ...続きを読む

Q特定文字のある行の前に空白行を挿入したい

5000行ほどあるエクセルファイルで、
「■」の文字がある行の直前に空白行を挿入したいと思っています。
「■」のある行が1500行ほどあるので、
手作業は大変かと思い、マクロでやるのはどうかな?と
おもったのですが、既存のマクロを少し修正することはあっても
初めからマクロを組んだことがないので、
どう書けばよいかわかりません。

データはA列にしか無い状態で、
「■」がある行の直前に空白行を挿入するマクロは
どのように書けばよいのでしょうか?
ご教授のほどお願いします。

Aベストアンサー

>初めからマクロを組んだことがないので、

一般機能でもできると思います。
検索で「■」[すべて検索]
下に検索されたセルが表示されるので
[CTRL]+[A]を押して、すべて選択します。
最後の「■」にカーソルがあるので、そのセルで右クリック。
[挿入]をクリック。[行全体]を選択して[OK]
いかがでしょう。

QEXCEL VBA 条件による行の自動挿入

お世話になります。

EXCEL VBAを使用して自動で行の挿入処理を実施したいと思っております。

やりたい事は添付図の表1を処理ボタンを押せば自動で表2のようにしたいのです。
表2の黄色部分が自動挿入させたい部分です。


例えば「表2作成」というボタンを押したら・・

[sheet1]にある表1をC1からC??の最終行までREADしてC??の文字列が
[定価番販売実績]であれば・・
(1)[定価販売実績]の上の行に[定価販売予定]という行を挿入
(2)[定価販売実績]の下の行に[定価差異]という行を挿入

[得売販売実績]であれば・・
(3)[特売販売実績]の上の行に[特売販売予定]という行を挿入
(4)[特売販売実績]の下の行に[特売差異]という行を挿入

という作業を全商品に対して実施したいのです。
図では3商品ですが実際には変動ですが100~200品位です。

出来上がった新しい表2は別シートに表示できれば最高です!

どなたか方法をご教授いただけませんでしょうか?
よろしくお願い致します。

環境
Windows XP SP3
EXCEL2003

お世話になります。

EXCEL VBAを使用して自動で行の挿入処理を実施したいと思っております。

やりたい事は添付図の表1を処理ボタンを押せば自動で表2のようにしたいのです。
表2の黄色部分が自動挿入させたい部分です。


例えば「表2作成」というボタンを押したら・・

[sheet1]にある表1をC1からC??の最終行までREADしてC??の文字列が
[定価番販売実績]であれば・・
(1)[定価販売実績]の上の行に[定価販売予定]という行を挿入
(2)[定価販売実績]の下の行に[定価差異]という行を挿入

[得売販売実績]であれば・...続きを読む

Aベストアンサー

こんばんは!
VBAでの一例です。
画像通り1行目は項目行で、データは2行目以降にあるとします。
画像を拝見するとA列は結合してあるようですね!

>処理ボタンを押せば自動で・・・
とありますので、操作したいSheetにコマンドボタンを配置するとします。
↓のコードをコピー&ペーストしてコマンドボタンをクリックしてみてください。
コマンドボタンでなくても
メニュー → 挿入 → オートシェイプ → 挿入したオートシェイプ上で右クリック → マクロの登録 → 新規作成
このVBE画面でも構いません

Private Sub CommandButton1_Click() 'この行から
Dim i As Long, k As Long
Range("A:A").UnMerge
For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
If Cells(i, 1) = "" Then
Cells(i, 1) = Cells(i - 1, 1)
End If
Next i
For i = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1
If Cells(i, 3) = "定価販売実績" Then
Rows(i + 1).Insert
Cells(i + 1, 3) = "定価販売差異"
Cells(i + 1, 1) = Cells(i, 1)
Rows(i).Insert
Cells(i, 3) = "定価販売予定"
Cells(i, 1) = Cells(i + 1, 1)
ElseIf Cells(i, 3) = "特売販売実績" Then
Rows(i + 1).Insert
Cells(i + 1, 3) = "特売販売差異"
Cells(i + 1, 1) = Cells(i, 1)
Rows(i).Insert
Cells(i, 3) = "特売販売予定"
Cells(i, 1) = Cells(i + 1, 1)
End If
Next i
Application.DisplayAlerts = False
For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
If Cells(i, 1) = Cells(i - 1, 1) Then
Range(Cells(i - 1, 1), Cells(i, 1)).Merge
End If
Next i
Application.DisplayAlerts = True
End Sub 'この行まで

※ 1行目と最終行は
コマンドボタンを挿入 → 挿入したコマンドボタン上でダブルクリックすると自動で表示されますので、
ダブらないようにコードをコピー&ペーストしてみてください。

尚、一旦コマンドボタンをクリックすると元に戻せませんので
別Sheetで試してみてくだい。m(_ _)m

こんばんは!
VBAでの一例です。
画像通り1行目は項目行で、データは2行目以降にあるとします。
画像を拝見するとA列は結合してあるようですね!

>処理ボタンを押せば自動で・・・
とありますので、操作したいSheetにコマンドボタンを配置するとします。
↓のコードをコピー&ペーストしてコマンドボタンをクリックしてみてください。
コマンドボタンでなくても
メニュー → 挿入 → オートシェイプ → 挿入したオートシェイプ上で右クリック → マクロの登録 → 新規作成
このVBE画面でも構いません

Priva...続きを読む

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

Q指定した文字があった場合、その行を削除するマクロが欲しいです

指定した文字があった場合、その行を削除するマクロが欲しいです
Sheet1(Sheet1以外は対象外)のB列に
XYZ
という文字があった場合、その行をすべて削除する
というマクロはどのように作ればいいでしょうか?
お時間ある方アドバイスいただければ幸いです。

Aベストアンサー

手抜きですがこんな感じでどうでしょう。
削除する行が多いなら画面更新を停止した方が良いでしょう。

Sub Sample()
 Sheets("Sheet1").Select
 Do While (True)
  Columns("B:B").Select
  Set mySelect = Selection.Find(What:="XYZ")
  If mySelect Is Nothing Then Exit Do
  Rows(mySelect.Row).Select
  Selection.Delete Shift:=xlUp
 Loop
End Sub

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

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

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

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

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

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

宜しくお願いします。

Aベストアンサー

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

でどうでしょうか?

Qエクセル マクロで数値が変った時行挿入できますか

最近VBAを勉強しはじめた初心者です。

簡単なマクロを使ってエクセルシートを作成中しているのですが、以下の部分がどうしても分りません。

(1)ある列(例えばA列)に数字が入っています。
(2)その数字は、セル1個つき1桁から3桁(1から100の場合)です。
(3)「1」「1」「1」と3セル並んでいたり、「2」「2」が2セルだったりと色々です。
(4)この数字が変化したとき、例えば「1」と「2」の間、「2」と「3」の間などに、
 自動的に行挿入して、空白行を作りたいと思っています。

マクロでこのような事が可能でしょうか?
もし、お分かりになる方がおられましたら、ご教示の程お願いいたします。
どうぞよろしくお願いいたします。

Aベストアンサー

こんな感じでしょうか。

Sub Macro1()
 Dim i As Long

'A列の最終行から上方向にA列の値を見ていき
 For i = Range("A" & Rows.Count).End(xlUp).Row To 3 Step -1

'前の行の値と異なる場合には
  If Range("A" & i).Value <> Range("A" & i - 1).Value Then

'行を挿入します。
  Rows(i).Insert

  End If
 Next i
End Sub

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....続きを読む

QVBAで行コピーして挿入

1行目の内容をコピーして、他の場所に指定数分だけ
挿入するマクロを作りました。

そのマクロ自体は、正しく動いたのですが、コピー元の1行目に
他のシートを参照する関数が入っていた場合、想定どおりの
結果を得ることができません。

[SHEET1:データのみを記載]
省略

[SHEET2]
A1セル:   =SHEET1!$A1 ←コピー元の行

[マクロ:一部抜粋]
myR = Application.InputBox("挿入する行数を入れてください", , "1")

For i = 1 To myR
  Rows("1:1").Copy
  Cells(ActiveCell.Row, 1).Select
  Selection.Insert Shift:=xlDown
  Selection.EntireRow.Hidden = False
Next i

どういう結果を求めたいかというと、たとえば、
SHEET2のA10セル上で、このマクロを実行し、 "挿入行 = 3" と指定したら

A10:   =SHEET1!$A10
A11:   =SHEET1!$A11
A12:   =SHEET1!$A12

となってほしかったのですが、結果は、

A10:   =SHEET1!$A10
A11:   =SHEET1!$A10
A12:   =SHEET1!$A10

となってしまいました。

どうにか、求める結果を得られるようにできないでしょうか?

1行目の内容をコピーして、他の場所に指定数分だけ
挿入するマクロを作りました。

そのマクロ自体は、正しく動いたのですが、コピー元の1行目に
他のシートを参照する関数が入っていた場合、想定どおりの
結果を得ることができません。

[SHEET1:データのみを記載]
省略

[SHEET2]
A1セル:   =SHEET1!$A1 ←コピー元の行

[マクロ:一部抜粋]
myR = Application.InputBox("挿入する行数を入れてください", , "1")

For i = 1 To myR
  Rows("1:1").Copy
  Cells(ActiveCell.Row, 1).S...続きを読む

Aベストアンサー

Active.Cellが同一の位置なのだから相対変位しません。

一例です。(ループは不要なので削除しました)
myR = Application.InputBox("挿入する行数を入れてください", , "1")
Rows("1:1").Copy
Rows(ActiveCell.Row & ":" & ActiveCell.Row + myR - 1).Select
Selection.Insert Shift:=xlDown
Application.CutCopyMode = False

Qエクセルで特定の行を削除したいのですが。

エクセルで特定の行を一発で削除したいのですが、やり方がわかりません。
どなたか詳しい方お教えいただけませんでしょうか?

やりたいことは、B列に、特定の文字が有れば、その行全部を削除して上方向にシフトしていきたいのですが、マクロとかを使うのでしょうか?
宜しくお願いいたします。

Aベストアンサー

マクロを使う別の方法です。
XXXの部分を特定の文字に置きかえて実行してください。
また、「特定の文字があれば」というのが、その文字列を含む、というのでなくセルの値がその文字列ならば、というのであれば、LookAt:=xlPart の部分を LookAt:=xlWhole に書き換えてください。

Sub DelLines()
  Dim R As Range
  Do
    Set R = ActiveSheet.Range("B:B").Find(What:="XXX", LookAt:=xlPart)
    If R Is Nothing Then Exit Sub
    R.EntireRow.Delete
  Loop
End Sub


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

人気Q&Aランキング

おすすめ情報