エクセルのSheet1のA列の1行目から下の行へ1から1000まで数字(整数)が入っているとします。ただし、欠番があります。そこで、欠番を挿入して行を増やしたいのですが、すべての整数を挿入するには以下のマクロで解決しているのですが、任意の整数(下二桁が同じ整数)まで挿入したら次の桁へ飛んで、また同じ任意の整数(下二桁が同じ整数)まで来たら次の桁へ飛んでという具合に、これらを繰り返したいのです。例えば、1から46まで、100から146まで、200から246まで、300から346までという具合です。どなたかご教授よろしくお願いします。
Sub 欠番挿入()
Dim i As Integer
i = 0
Do Until ActiveSheet.Range("a2").Offset(i, 0).Value = ""
ActiveSheet.Range("a2").Offset(i, 0).Activate
If ActiveCell.Value <> ActiveCell.Row Then
Rows(ActiveCell.Row).Insert
ActiveSheet.Range("a2").Offset(i, 0).Value _
= ActiveCell.Row
End If
i = i + 1
Loop
End Sub
No.1
- 回答日時:
> 例えば、1から46まで、100から146まで、200から246まで、300から346までという具合
たとえば以下のようなことで可能です。
myAnyValue = 46
For i = 1 To 1000
'やりたいことのコード
If i = myAnyValue Then
myAnyValue = myAnyValue + 100
i = Int(myAnyValue / 100) * 100 - 1
End If
Next
この回答への補足
ご回答ありがとうございます。とてもシンプルで美しいのですが、完全なコードでご教授いただけませんか。自分が提示したものに、回答いただいたコードを加工編集したいのですがうまくいきません。よろしくお願い申し上げます。
補足日時:2011/12/01 21:26No.2
- 回答日時:
処理をする発想(ロジックという)は色々在る。
経験では、行挿入法は、処理に時間がかかるように思うし、ロジックも難しく成りがち。
ーー
それで別シートに実現法を考えた。
例データ Sheet1
A2:D6 D列までの例 A列に数字の番号有りとする。
1aaaaaa
3bbbbbb
6cccccc
9dddeee
4xxxxxx
番号順で無くても良い。
ーーーー
結果 Sheet2
A2:D31
1aaaaaa
2
3bbbbbb
4xxxxxx
5
6cccccc
7
8
9dddeee
10
・・・
11行目以下掲載略
===
コード 標準モジュールに
Sub test01()
Dim sh1, sh2 As Worksheet
Set sh1 = Sheets("Sheet1")
Set sh2 = Sheets("Sheet2")
'---A2セルから連番を振る。例として番号を30までにしている。下記のA31は、必要番号の数に寄り適宜考えて。
sh2.Range("A2") = 1
sh2.Range("A2:A31").DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
Step:=1, Trend:=False
'---Sheet1からSheet2ヘコピー
d = sh1.Range("A65536").End(xlUp).Row
MsgBox d
For i = 2 To d
n = sh1.Cells(i, "A") '番号
MsgBox n
sh1.Range("A" & i & ":x" & i).Copy sh2.Cells(n + 1, "A") 'Sheet2のしかるべき行に貼り付け
Next i
End Sub
データ列は最多でX列までと仮定
この回答への補足
お礼が遅くなりすみません。ご回答ありがとうございます。発想がとても豊かで、思いつきませんでした。ボックスが出てくるのでひたすらEnterキーを押し続けました。そしたら、B列からD列までの値がShhet2に反映されました。ありがとうございます。ただし、1から46までいったら100へ飛んで146まで欠番挿入し、そしてさらに200へ飛んで246まで欠番挿入し…という具合にはうまくいきませんでした。困りました。
補足日時:2011/12/05 21:41No.3
- 回答日時:
> ご回答ありがとうございます。
とてもシンプルで美しいのですが、完全なコードでご教授いただけませんか。以下のような状態でいかがでしょう。
Sub 欠番挿入()
Dim i As Integer, myAnyValue As Integer
myAnyValue = 46
For i = 1 To 1000
If ActiveSheet.Range("a2").Offset(i, 0).Value <> "" _
Or ActiveSheet.Range("a2").Offset(i, 0).Value <= myAnyValue Then
If ActiveSheet.Range("a2").Offset(i + 1, 0).Value = "" Then
Exit Sub
End If
ActiveSheet.Range("a2").Offset(i, 0).Activate
If ActiveCell.Value - ActiveCell.Offset(-1, 0) <> 1 Then
Rows(ActiveCell.Row).Insert
ActiveSheet.Range("a2").Offset(i, 0).Value _
= ActiveCell.Offset(-1, 0).Value + 1
End If
End If
If i = myAnyValue Then
myAnyValue = myAnyValue + 100
i = Int(myAnyValue / 100) * 100 - 1
End If
Next
End Sub
この回答への補足
ご回答ありがとうございます。A列に適当な数字を下へ割り振って試してみたが、100までは49までの欠番が挿入され、100以上は何も変化がありませんでした。その後私もこのコードを少しいじったのですが、どうやらうまくいきません。もし可能であれば手を加えていただき、修正してもらえると大変助かります。よろしくお願い申し上げます。
補足日時:2011/12/04 07:39No.4ベストアンサー
- 回答日時:
> 100までは49までの欠番が挿入され、100以上は何も変化がありませんでした。
質問では46まででしたし、テストが甘かったみたいで、ちゃんと動かなかったですね。
以下のように変更してみてください。
Sub 欠番挿入()
Dim i As Integer, myAnyValue As Integer
myAnyValue = 46
For i = 0 To 999
If ActiveSheet.Range("a1").Offset(i, 0).Value = "" Then
Exit Sub
End If
ActiveSheet.Range("a1").Offset(i, 0).Activate
If i <> 0 Then
If ActiveCell.Value - ActiveCell.Offset(-1, 0) <> 1 _
And ActiveCell.Offset(-1, 0).Value < myAnyValue Then
Rows(ActiveCell.Row).Insert
ActiveCell.Value = ActiveCell.Offset(-1, 0).Value + 1
End If
End If
If i = myAnyValue Then
myAnyValue = myAnyValue + 100
i = Int(myAnyValue / 100) * 100 - 1
End If
Next
End Sub
この回答への補足
今回も早々のご回答ありがとうございます。私の説明の仕方が悪かったようで、、、すみません。いただいたコードは1から46までの欠番はうまく挿入されました。私のやりたかったのは、1から46まで挿入したら、次は100から146まで、次は200から246まで、次は300から346までという具合に、A列の最後の行まで入っている数字(およそ1000まで)について、次の「くらい」に飛んで下2桁が46になるように欠番を挿入するものです。もし可能であればご提示いただけませんか。よろしくお願い申し上げます。
補足日時:2011/12/05 21:26本当にいろいろと対応していただき感謝申し上げます。A列に連番を入れて試しましたが、やはり100以上の数字に関しては欠番が挿入されませんでした。このコードをもとに解決策を探ってみたいと思います。本当にありがとうございました。
No.5
- 回答日時:
> 私のやりたかったのは、1から46まで挿入したら、次は100から146まで、
> 次は200から246まで、次は300から346までという具合に、
> A列の最後の行まで入っている数字(およそ1000まで)について、
> 次の「くらい」に飛んで下2桁が46になるように欠番を挿入するものです。
100以上でもX46までは連番として挿入されるのですが…。
100から146までの欠番はすべて146に
200から246までの欠番はすべて246に
ということでしょうか?
この回答への補足
回答ありがとうございます。
>100から146までの欠番はすべて146に
200から246までの欠番はすべて246に
ということでしょうか?
そのとおりです。可能ですか。よろしくお願い申し上げます。
No.6
- 回答日時:
> そのとおりです。
可能ですか。よろしくお願い申し上げますこういうことでしょうか…
Sub 欠番挿入()
Dim i As Integer, myAnyValue As Integer
myAnyValue = 46
For i = 0 To 999
If ActiveSheet.Range("a1").Offset(i, 0).Value = "" Then
Exit Sub
End If
ActiveSheet.Range("a1").Offset(i, 0).Activate
If i <> 0 Then
If ActiveCell.Value - ActiveCell.Offset(-1, 0) <> 1 _
And ActiveCell.Offset(-1, 0).Value < myAnyValue _
And ActiveCell.Offset(1, 0).Value <> myAnyValue Then
If ActiveCell.Value > 99 Then
For j = 1 To ActiveCell.Value - ActiveCell.Offset(-1, 0) - 1
Rows(ActiveCell.Row).Insert
ActiveCell.Value = myAnyValue
Next
Else
Rows(ActiveCell.Row).Insert
ActiveCell.Value = ActiveCell.Offset(-1, 0).Value + 1
End If
End If
End If
If i = myAnyValue Then
myAnyValue = myAnyValue + 100
i = Int(myAnyValue / 100) * 100 - 1
End If
Next
End Sub
この回答への補足
今回も回答をありがとうございます。懸命に答えてくださるので恐縮しています。
試してみましたが、すみませんうまく伝わらなかったようでした。試してみたら、46という行がやたら多く挿入されました。
行いたいのは1,2,3,4…43,44,45,46までの整数行を挿入、101,102,103,104…143,144,145,146までの整数行を挿入、201,202,203,204…243,244,245,246までの整数行を挿入、301,302,303,304…343,344,345,346までの整数行を挿入という具合に行をどんどん挿入し、A列の最後の数字が入っている行まで挿入し続けるというものです。いかがしょうか。
No.7
- 回答日時:
> 行いたいのは1,2,3,4…43,44,45,46までの整数行を挿入、
> 101,102,103,104…143,144,145,146までの整数行を挿入、
> 201,202,203,204…243,244,245,246までの整数行を挿入、
> 301,302,303,304…343,344,345,346までの整数行を挿入
No4のコードでそうなるはずなのですが…No4を試してみてできないと言ってるんですよね。
x46以降の連番についてはなにもしないということで
たとえば 346以降 347,350,351と飛び番があっても無視してそのままです。
この回答への補足
何度もすみません。ネットだどうまく伝わらなくて失礼な補足を出していたら申し訳ありません。
No4のコードで100までの数字についてはできているのですが、やはり100以上の数字についてはなにも起こりません。(1から46までは欠番が挿入されました。)私のエクセルが変なのでしょうか?
>x46以降の連番についてはなにもしないということで
たとえば 346以降 347,350,351と飛び番があっても無視してそのままです。
これはおっしゃるとおりでOKです。
何か改善策はありますか。
No.8
- 回答日時:
> >100から146までの欠番はすべて146に
> 200から246までの欠番はすべて246に
> ということでしょうか?
>
> そのとおりです。可能ですか。よろしくお願い申し上げます。
そのとおりと書いていますが、あなたはこの文章をどう理解したのか聞かせてもらえますか。
すべて146すべて246と書いているのにどう理解したのでしょうか?
その前に
> 次の「くらい」に飛んで下2桁が46になるように欠番を挿入するものです
下2桁が46になるようにと書いているのはあなた自身ですよ。
日本語ちゃんと理解してちゃんと日本語を書いてください。
また、
> 46という行がやたら多く挿入されました。
46という行ですか、100の位はなかったんですか?
そのように作った覚えはありませんが
あなたのエクセルどこかおかしいんじゃないですか?
No.9
- 回答日時:
> 何か改善策はありますか。
こちらでは正常に動くので こちらでは手の加えようがありません。
そんなに難解なコードではありませんから
ご自身でコードの流れをつかんでいただいて
どうして100以上でできないのかはご自身で改善してください。
いちど単純なA列だけの連番を作成したファイルを作成してテストしてみてもいいでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/01/06 08:39
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
恋人などと挿入したまま入眠し...
-
太ってる女とのSEX
-
直ぐに挿入をせまる彼女
-
40代男性が好むSEXはどんなもの...
-
挿入時、キツっって言いながら...
-
入れてる最中に、『めっちゃ濡...
-
挿入中の潮について、ものすご...
-
処女卒業して3ヶ月の大学生です...
-
もう少しでイケそうな時、どん...
-
嫁がバイブでしか逝きません。
-
女性の方 イクようになったき...
-
女性の方へ、イクことと女性の...
-
挿入のときに力を抜く方法はあ...
-
(女性へ質問)ピストン運動の...
-
高齢熟女も濡れるんですか?
-
あそこが狭い女性とのHについ...
-
手コキとマンコに挿入するのと...
-
手マンと挿入どっちが気持ちい?
-
入ってるかどうかわからない
-
AVって、本当に挿入してるんで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
太ってる女とのSEX
-
恋人などと挿入したまま入眠し...
-
直ぐに挿入をせまる彼女
-
40代男性が好むSEXはどんなもの...
-
挿入時、キツっって言いながら...
-
処女卒業して3ヶ月の大学生です...
-
入れてる最中に、『めっちゃ濡...
-
もう少しでイケそうな時、どん...
-
女性の方へ、イクことと女性の...
-
あそこが狭い女性とのHについ...
-
入ってるかどうかわからない
-
女性の方 イクようになったき...
-
手コキとマンコに挿入するのと...
-
嫁がバイブでしか逝きません。
-
いきそうでいけない・・・
-
挿入中の潮について、ものすご...
-
すぐ乾いて挿入できません
-
挿入のときに力を抜く方法はあ...
-
挿入しやすい体位
-
女です。高確率で前戯でイッて...
おすすめ情報