
エクセルの表のF9~F16に、上から順に、 H、空白、H3、空白、空白、H、空白、空白
と記載されています。
このHが二つあるのを解消したいのですが、下の方をH2に直して解消したいのです。
この修正する方法をできれば、マクロで修正したいのですが、その方法を教えてください。
よろしくお願いします。
実はこのH、H2,H3の表現は、別の列にある数値の1番小さいものをH、2番目をH2、3番目をH3と
マクロを使って計算しており、このH,H2,H3の表現から別の表のある記号を同じマクロを使って抽出しているのですが、Hが2つあると、マクロが止まってしまい、その都度手で治す必要が出てきます。(Hが2つある場合、H2が計算上なくなるので、ここでマクロが止まってしまいます)
数量が非常に多いので、これをスムーズに行かさないと、死ぬまでに終わりません。
よろしくお願いします。
No.5ベストアンサー
- 回答日時:
No4です。
補足ありがとうございました。とりあえず、HをH2に変換するマクロです。
F9~F16の範囲で、2つ目以降のHをH2に変換します。
(3つ目以降のHもH2に変換します)
Public Sub HをH2に変換()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim wrow As Long
Dim count As Long: count = 0
For wrow = 9 To 16
If ws.Cells(wrow, "F").Value = "H" Then
count = count + 1
If count > 1 Then
ws.Cells(wrow, "F").Value = "H2"
End If
End If
Next
End Sub
ありがとうございます。
出来ました。
イヨ! 大統領!
すごいです。
こんなにうれしいのは久しぶりです。
今後ともよろしくお願いします。
No.4
- 回答日時:
補足要求です。
1.最初のHの出現する可能性のあるセルは、F9~F16で、あってますか。
2.2番目のHの出現する可能性のあるセルは、どの範囲になりますか。
3.3番目のHが出現するケースはないと考えて良いですか。
4.重複するのはHだけで、H2が重複とかH3が重複とかのケースはないと考えて良いですか。
ありがとうございます。
お答えします。
1⇒その通りです。
2⇒F9~F16です。(D列での2番目に小さい数字に対応しているのでF9もありです)
3⇒出現するケースはありますが、非常にまれなため、マクロが止まっても対応可能です。よってそのケースは無視してもらってもOKです。
4⇒H2の重複はあります。この場合は行の下のH2をH3に直します。
ただ、Hが2個の場合がわかればH2が2個の場合もなんとかできると考え、質問はHのみに致しました。
尚H3の重複はありますが、D列の3番目に小さい数字を上の列から認識していくので、一番上に現れたH3に次のステップでは反応するため、F列上にいくらH3が現れても構いません。マクロは次に進みます。
H2はD列(D9~D16)で計算した数値が小さい方から2番目なので、
H2もHと同じく、F上ではF9~F16となります。H3も同様です。
尚D列の最小値が2個の場合、F列ではHが2個となり、3番目に小さい数字が
H3となり、H2がF列に現れません。よって本来F列のH2により、出そうとしている、別の記号が”#N/A”となり、マクロが止まってしまいます。
マクロは6万個ほど実施しなくてはならないためとても止まってなどいられません。よろしくお願いいたします。
(注)Hが2個の場合(もしくはH2が二個の場合は、エクセル表の行の上のほうをH、下のほうをH2と定義しています。(H2二個のばあいは上をH2,下をH3)
No.3
- 回答日時:
最初のHがどこに来るか分からないため、すべてのセルに対して処理を書く必要があるということですね。
その場合は、F9~F16の範囲だけでなく、全てのセルに対して処理を行う必要があるため、以下のようなコードになります。Sub ReplaceH()
For Each cell In ActiveSheet.UsedRange
If cell.Value = "H" Then
If cell.Offset(1, 0).Value = "H" Then
cell.Offset(1, 0).Value = "H2"
End If
End If
Next cell
End Sub
ActiveSheet.UsedRangeは、現在アクティブなシートで使用されている範囲を示します。このコードは、全てのセルに対してHが2つある場合に下のセルをH2に置き換えるものです。
ありがとうございます。
上記式でやってみましたが、If cell.Value = "H" Then の所で、型が一致しないと出ます。
シートの表は、A1~KY400ぐらいまであるので、やはりF9~F16に絞らないと、ダメかと思います。
F9~F15までにあるHに対し、その下にHがあればそのHをH2にするだけなので、簡単な方法があると思うのですが、いくら考えても私の脳では無理なのでよろしくお願いします。
今年75歳の年寄りで、余命25年ほどしかありません。データーが6万ほどあるので、一回一回マクロが止まれば、死ぬまでに完結しません。
なにとぞよろしくお願い申し上げます。
No.2
- 回答日時:
こんにちは
>実はこのH、H2,H3の表現は、~~
>マクロを使って計算しており
よくわかりませんけれど、そちらの出力ロジックを修正すべきでは?
継当てをして、更に継当てをするような発想になりかねないので、しまいには何が何だかになりそう。
ありがとうございました。実はマクロを使っての計算は、ややこしいので、マクロ上で一度、値に変更した場合で検討していました。値でセットされている場合でのいい方法はないでしょうか
尚、マクロは、F9~F26のセルに
IF(D9=SMALL($D$9:$D$26,1),"H",IF(D9=SMALL($D$9:$D$26,2),"H2",IF(D9=SMALL($D$9:$D$26,3),"H3","")))
という関数を、入れたうえで、動かしていたのですが、お答えの内容ではこの式でH、H2,H3を特定することが良いのではといわれていると思います。
この式のどこかを直せばよいでしょうか?もしくはこれ以外の式があるのでしょうか?教えてください
No.1
- 回答日時:
マクロを使って、F9~F16のセルの値を読み取り、Hが2つある場合にはH2に書き換える方法があります。
以下のようなVBAコードを作成することができます。
Sub ReplaceH()
For Each cell In Range("F9:F16")
If cell.Value = "H" Then
If cell.Offset(1, 0).Value = "H" Then
cell.Offset(1, 0).Value = "H2"
End If
End If
Next cell
End Sub
これは、F9~F16のセルを順番に読み取り、もしセルの値が"H"で、その下のセルの値も"H"だった場合には、下のセルを"H2"に書き換えるものです。
実行すると、F9~F16のセルのHが2つある場合には、H2に置き換えられます。
ありがとうございました。
上記内容をエクセルに入れると、”H”の入った行の一つ下では、OKなのですが、
2つ下以下の場合にはどうすればよいでしょうか?
for n=1 to 18
を使って、(1,0)を(n,0)にやってもうまくいかないので、もしうまくいく方法があれば教えてください。
ただ、2つ下に特定して(2,0)とすれば2つ下だけはできます。
でも最初の”H”がどこに来るかもしれないので、すべての式を書くのは大変でとてもできそうにありません。よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Visual Basic(VBA) セルに抜けた番号の代わりに空白を挿入する 4 2023/04/10 20:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/16 14:36
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) 特定文字(数字)で行挿入、挿入された行で合計したい 2 2023/03/13 14:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
Excelで、図形内の文字をセルに...
-
Excel内での検索結果をシート...
-
クリックすると文章が表示され...
-
マクロを実行すると画像がズレ...
-
フォントの色を指定して削除出...
-
太字に設定されているセルの個...
-
エクセルでPDFリンクを大量...
-
現在のセルの位置を返す関数は...
-
Excel VBAでマクロの実行範囲を...
-
エクセルでセルをダブルクリッ...
-
セルの内容をテキストボックス...
-
アポストロフィーの一括挿入 ...
-
ページ内ハイパーリンクの表示...
-
エクセルでの特定位置のセル内...
-
エクセルである範囲のセルから...
-
Excel:セルの値(文字列)を数...
-
エクセルの読み上げ機能のvbaに...
-
Excel ハイパーリンクのURLを別...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
クリックすると文章が表示され...
-
Excelで、図形内の文字をセルに...
-
Excelでセルをクリックす...
-
Excel ハイパーリンクのURLを別...
-
太字に設定されているセルの個...
-
マクロを実行すると画像がズレ...
-
セルの内容をテキストボックス...
-
フォントの色を指定して削除出...
-
Excel:セルの値(文字列)を数...
-
Excel2007 色のカウント (VBA)
-
エクセルでPDFリンクを大量...
-
アポストロフィーの一括挿入 ...
-
現在のセルの位置を返す関数は...
-
エクセルでセルをダブルクリッ...
-
空白セルを空セルに置き換える...
-
エクセル シート保護された共...
-
エクセル 未入力セルがあると...
おすすめ情報