• 締切済み

VBA_取消線のある行を検索、その行に操作を加える

取消線のある行を検索して、その行に操作を加えるといったVBAを組みたいです。 ①表のB列の最終行を取得する ②B列の13行目から最終行まで④⑤の処理を繰り返す ③取消線のある行を検索する。(行No.を取得?) ④例えば13列目が取消線該当なら   その行に入力されている内容をコピー&枠外にペースト(P)  B13,C13,G13,I13,J13,K13,L13,M13,N13をコピーする。  R13にペースト(P) ⑤コピー元のセルを空欄にする_B13,C13,G13,I13,J13,K13,L13,M13,N13 といった流れにしたいのですが、③~が分かりません。 ③の"取消線がある行を取得"というよりは、 取消線がなければスルー、取消線があれば④⑤の処理をする流れの方が良いでしょうか。

みんなの回答

  • kkkkkm
  • ベストアンサー率65% (1624/2466)
回答No.4

> コピー範囲に結合セルがあるようで、それでエラーになっているみたい 上下の結合セルだと思いますが Cells(i, "B").Resize(1, 13).ClearContents を Cells(i, "B").Resize(1, 13).Value = "" のように .ClearContents をやめて .Value = "" にしてみたらどうでしょう。上の行と結合している場合そこのデータは消えません。 上の行と結合していても消す場合は .ClearContentsのところを以下のようにしてみてもいいかもしれません。 For j = Range("B1").Column To Range("N1").Column Cells(i, j).MergeArea.ClearContents Next

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1624/2466)
回答No.3

D列E列F列とH列はコピーもしなければ削除もしないとかでしたら 取り急ぎですが Sub Test2() Dim LastRow As Long, i As Long LastRow = Cells(Rows.Count, "B").End(xlUp).Row For i = 13 To LastRow If Cells(i, "B").Font.Strikethrough = True Then Range("B" & i & ":C" & i & ",G" & i & ",I" & i & ":N" & i).Copy Cells(i, "R") Range("B" & i & ":C" & i & ",G" & i & ",I" & i & ":N" & i).ClearContents Cells(i, "B").Font.Strikethrough = False End If Next End Sub

1930orz
質問者

補足

セルの指定のなかで繰り返し構文が入ったりすると、混乱してしまって、非常に参考になります。 ありがとうございます。 コピー範囲に結合セルがあるようで、それでエラーになっているみたいなので少し粘って考えてみます。

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1624/2466)
回答No.2

> B列の13行目から最終行まで を見逃してました For i = 1 To LastRow は For i = 13 To LastRow B列からN列までをR列以降にコピペではない場合 どのセルの内容をどこにコピーするのか具体的に説明してください。

1930orz
質問者

補足

ありがとうございます。 B列からN列までをR列以降にコピペでOKです◎

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1624/2466)
回答No.1

たとえば 取り消し線が見つかったB列からN列までをR列以降にコピペでB列からN列までのデータを削除でしたら Sub Test() Dim LastRow As Long, i As Long LastRow = Cells(Rows.Count, "B").End(xlUp).Row For i = 1 To LastRow If Cells(i, "B").Font.Strikethrough = True Then Cells(i, "R").Resize(1, 13).Value = Cells(i, "B").Resize(1, 13).Value Cells(i, "B").Resize(1, 13).ClearContents Cells(i, "B").Font.Strikethrough = False End If Next End Sub

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA 毎回データが違っても応用できるコード2

    先ほどの回答をありがとうございました。 https://okwave.jp/qa/q9539233.html 手順が違っていましたので、再度質問させて頂きたいと思います。宜しくお願いします。 O列をフィルタで昇順にします。 2以上の数値(#N/Aも含む)が入った行のP列をコピーして同じ行のQ列に値でペーストするといった流れです。 見やすくするため、ペーストしたものは赤い文字にしてくれたらありがたいです。 O列    P列    Q列 2     79     79 2     79     79 3     #N/A    #N/A 4     #N/A    #N/A 5     80     80 8     80     80 8     80     80 10     80    80 11     80    80 18     #N/A   #N/A #N/A    84    84 #N/A    80    80       ↑    ↑      コピー  値でペースト

  • エクセルマクロ:空白行を除いてコピー

    マクロで次の作業を処理したいのですが、どのようなコードを書けばよいのでしょうか?教えてください。よろしくお願いします。 ○sheet1 ☆左側 列B~Hをワンセットとしたものが、計51行ある。先頭はタイトル行で9行目である。 D列には固定の文字列が与えられており、E列はブランクで、D・Eともに非表示にしておきたい。 B10~B59には、固定で1~50の数字が順番に与えられている。 C10~C59、G10~G59、H10~H59には数値が、F10~F59には文字列が入力される。 空白の場合もあり、どの行に入力されるかは不明。 ☆右側 列J~Pをワンセットとしたものが、計51行ある。先頭はタイトル行で9行目である。 J10~J59には、固定で51~100の数字が順番に与えられている。 K10~K59、M10~M59、O10~O59、P10~P59には数値が、L10~L59、N10~N59には文字列が入力される。 空白の場合もあり、どの行に入力されるかは不明。 ○sheet2 sheet1のボタンをクリックし、sheet2を表示させ、 sheet1の値を次のようにsheet2に貼付けたい。 sheet2のB8~H107の範囲内で上から、sheet1の左側B10~H59と右側J10~P59の空白を含む行を除いた セット(列B~H、列J~P)のみをコピーし、左側と右側を連続して、値のみ貼付けたい。 ※C列とK列の空白を判定すれば良い ※並べ替えなどのために別シートを置きたくない ※非表示列の扱い方

  • VBAでの行集計

    VBAでの行集計 いつもお世話になっております 今 マクロでの行集計で困っております。 お力をお貸し下さい m(__)m したいことは B列最終セルを見つけ出し 列の合計を出す 合計を右横最終セルまでコピーする 最終はR列までです そこで下記のマクロで合計は出しました Dim BeforePos As Long BeforePos = Range("B4").End(xlDown).Row Cells(BeforePos + 1, 2).Formula = "=SUM(B4:B" & BeforePos & ")" このセルの数式を右最終列までコピーをしたい それだけのことですがうまくいきません どうかよろしくお願いします

  • VBAで特定行へのコピーを指定した回数繰り返す処理をしたいが。

    行2を行1へ、コピー&ペーストする。 行3を行1へ、コピー&ペーストする。 行4を行1へ、… というように、行1へのコピー&ペーストを、指定した回数行う、 という処理をVBAのコードで書きたいのですが、本をみてもよくわかりません。 回数の指定は、特定セルに入力した値を取得するような形でやりたいのです。 具体的に、こう書けばできるよ、といった回答をお願いいたします。

  • 【Excel VBA】データの最終行について

    Excel2003を使用しています。 ある一覧表形式のデータSheet1をSheet2に値のみコピーして、このSheet2を“印刷用”として、ページ設定等をして、印刷のみに使用しようと思っています。 Sheet2のI列、J列、K列には数値が入力されていて、I列、J列、K列のデータの最終行の1行下に、それぞれ6行目からデータ最終行までの合計の数式が入力されるよう、コードを追加したのですが、数式は入力されるものの、入力したい行に数式が入力されません。 マクロを実行して、数式が入力された行を見てみると、301行目に入力されていました。 Sheet1は別のシートのデータを数式により表示していて、数式が300行まで入力されているので、Sheet2の元になっているSheet1の影響(?)なのかな~?と…。こういう場合、どうすればいいでしょうか? コードは下記のようになっています。 よろしくお願いします。 ---------------------------------------- Sub 印刷用作成() Dim i As Integer Dim j As Long Sheets("Sheet1").Activate Range("B6:L6", Range("L6").End(xlDown)).Select Selection.Copy Sheets("Sheet2").Select Range("B6").PasteSpecial xlPasteValues Application.CutCopyMode = False For i = 9 To 11 j = Application.Max(j, Cells(65536, i).End(xlUp).Row + 1) Next For i = 9 To 11 Cells(j, i).FormulaR1C1 = "=SUM(R2C[0]:R[-1]C[0])" Next i End Sub

  • VBAで検索して、行をコピー&追加したい

    Excel2010で以下のことをしたいのですが、VBAがあまりできないのでやれません。 どうか助けてください。 ・sheet1のA列に検索用の番号(例として商品番号)が入力されています。 ・sheet2はデータベースで、A列に商品番号B列に商品名、C列に国名、D列に価格・・~その後J列まで情報が入っています。(行数は1万行) ・sheet1に入っている商品番号でデータベースから行をピックアップし、該当の行をsheet1のB列以降にコピーしたいのです。 (シート3を新しく作っても構いません。やりやすい方で) ・ただし、同じ商品番号で複数の行がヒットしますので、複数の行がヒットしたら行を追加しながら、行をコピーしたいです。 どのように書いたら良いか参考になるURLだけでもご教授ください。 よろしくお願いします。

  • 【VBA】Ifで他シートから検索しコピーする

    Excel vbaについて教えてください。 自分で作成したコードが、うまく動かず悩んでいます。 ●作りたいもの Sheet3のA列にある数字を検索値とし、 Sheet1のA列を検索し、合致する行のB列~最終列までコピーし、 Sheet3のB列から貼付する。 ※Sheet1にある列数(項目数)は不定です ●作成したマクロ Sub test() Dim sh1 As WorkSheet Dim sh2 As WorkSheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet3") d = sh2.Range("A1").End(xlDown).Row 'Sheet3検索値のA列のデータの最終行 g = sh1.Range("B1").End(xlToRight).Column 'Sheet1の最終列 k = 2 For i = 2 To d    'Sheet3最終行まで If sh1.Cells( i & "A") = sh2.Cells( 1,"A") Then '条件)Sheet1とSheet3のA列が合致 For j = 2 To g                      'Sheet1の最終列まで sh2.Cells( k , j ) = sh1.Cells( i , j ) 'Sheet1のB行から最終列をコピーしSheet3へ貼付 Next j End If Next End Sub いろいろ直していたのですが、Set sh2 = Worksheets("Sheet3")で「インデックスが有効範囲にありません」(同じブック内に同名シートがあるのに?)とエラーが出たり、 また、B行から最終列までコピーする際の範囲指定についてもよくわからず、 もっと他に良い方法が無いものかとお手上げ状態です。 どうぞ宜しくお願いいたします。

  • 【Excel VBA】コードの書き方「AまたはBではなかったら…」

    Excel2003を使用しています。 マクロで、「選択した範囲で、A列-C列、または、F列-H列が0じゃなかったら、その行をコピーする」という処理をしたいのですが、どのようにコードを書いたらいいでしょうか? 当初は、「A列-C列が0じゃなかったら…」と条件がひとつだけで、そのときは、下記のコード(一部記載)で問題なく処理できていたのですが、条件をもうひとつ追加したら、エラーは出ないものの、結果が反映されなくなってしまいました。 マクロ勉強中ですので、ここはこんなふうにと指摘していただけると助かります。よろしくお願いします。 「A列-C列が0じゃなかったら…」   With Sheets("Sheet1")    For m = i To k    If .Cells(m, 1) - .Cells(m, 3) <> 0 Then    .Range(.Cells(m, j), .Cells(m, l)).Copy      ↓ 「A列-C列、または、F列-H列が0じゃなかったら…」    If( .Cells(m, 1) - .Cells(m, 3) <> 0 Or .Cells(m, 6) - .Cells(m, 8) <> 0) Then ( i, j, k, l で、それぞれ、選択範囲の1行目、1列目、最終行、最終列を取得しています。)

  • マクロ セルの色を含むシート間のコピー貼り付け

    このようなことが、できるでしようか。お教え下さいませんか。 シート1のB2~P列の最終行を取得してコピー、シート2のA2のO列の間に貼り付けたい。 但し、シート1は関数処理していて、シート2には値だけを貼り付けたい時のマクロはどのようなコードにすればよいでしょうか。 また、罫線はそののままコピーして貼り付けたい。 更に、シート1のB2からB列の最終行までは、黄色のセルになっているので、それもシート2のA2~A列の最終行まで貼り付けることってできますか。 お教え頂けますでしょうか。よろしくお願いします。

  • VBAのプログラムでうまく動かなくて困っています。

    VBA初心者です。 エクセルのVBAのプログラムでうまく動かなくて困っています。教えていただける方がいらしたら、ぜひ教えて下さい!よろしくお願いします。エクセルの内容は以下のとおりです。 (内容) セル    E H J L N P R・・・ 8行目100 200 50 40 30 80 9行目130 350 10 50 60 120 110 ・ ・ (1)列Hの値が列Eの値より大きい場合その下に行を追加します。 (2)セルJ+セルL+セルN+・・をしてセルEの値を超えたセル以降の値を追加した行のセルJ列から順にコピペする処理です。 上のセルの1行目の内容でいいますと、 (1)列Hの値「200」が列Eの値「100」より大きいのでその下に行追加 (2)セルJ、L、N「50」+「40」+「30」でセルEの値「100」より大きいので、追加した行のセルJ列にセルN、Pの値をコピペするです。 以下が私が書いたプログラムです。 Sub test() Dim x As Integer Dim s As Integer Dim t As Integer x = Range("B8").End(xlDown).Row r = Range("J8").End(xlToRight).Column '8行目から最終行までループ For i = x To 9 Step -1 If Cells(i, 5) < Cells(i, 8) Then ☆【For r = y To 11 Step -2 Cells(s, t).Value = Cells(i, r) + Cells(i, r + 2) If Cells(i, 5).Value < Cells(s, t).Value            Then Exit For Next】 Rows(i + 1).Insert Shift:=xlDown '超えたセルをコピーして、1行下の"J列以降"に代入 ★ x = x + 1 End If Next i End Sub 上記プログラムで★の部分がうまく書けません。☆の部分も間違っているような気がします。よろしくお願いします。

専門家に質問してみよう