プロが教えるわが家の防犯対策術!

エクセルの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

A 回答 (9件)

> 例えば、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:26
    • good
    • 0

処理をする発想(ロジックという)は色々在る。


経験では、行挿入法は、処理に時間がかかるように思うし、ロジックも難しく成りがち。
ーー
それで別シートに実現法を考えた。
例データ 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:41
    • good
    • 0

> ご回答ありがとうございます。

とてもシンプルで美しいのですが、完全なコードでご教授いただけませんか。

以下のような状態でいかがでしょう。

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:39
    • good
    • 0

> 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
    • good
    • 0
この回答へのお礼

本当にいろいろと対応していただき感謝申し上げます。A列に連番を入れて試しましたが、やはり100以上の数字に関しては欠番が挿入されませんでした。このコードをもとに解決策を探ってみたいと思います。本当にありがとうございました。

お礼日時:2011/12/08 22:51

> 私のやりたかったのは、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に
ということでしょうか?

そのとおりです。可能ですか。よろしくお願い申し上げます。

補足日時:2011/12/06 11:34
    • good
    • 0

> そのとおりです。

可能ですか。よろしくお願い申し上げます

こういうことでしょうか…

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列の最後の数字が入っている行まで挿入し続けるというものです。いかがしょうか。

補足日時:2011/12/07 10:47
    • good
    • 0

> 行いたいのは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です。

何か改善策はありますか。

補足日時:2011/12/08 11:14
    • good
    • 0

> >100から146までの欠番はすべて146に


> 200から246までの欠番はすべて246に
> ということでしょうか?
>
> そのとおりです。可能ですか。よろしくお願い申し上げます。

そのとおりと書いていますが、あなたはこの文章をどう理解したのか聞かせてもらえますか。
すべて146すべて246と書いているのにどう理解したのでしょうか?

その前に

> 次の「くらい」に飛んで下2桁が46になるように欠番を挿入するものです

下2桁が46になるようにと書いているのはあなた自身ですよ。
日本語ちゃんと理解してちゃんと日本語を書いてください。

また、

> 46という行がやたら多く挿入されました。

46という行ですか、100の位はなかったんですか?
そのように作った覚えはありませんが
あなたのエクセルどこかおかしいんじゃないですか?
    • good
    • 0

> 何か改善策はありますか。



こちらでは正常に動くので こちらでは手の加えようがありません。
そんなに難解なコードではありませんから
ご自身でコードの流れをつかんでいただいて
どうして100以上でできないのかはご自身で改善してください。

いちど単純なA列だけの連番を作成したファイルを作成してテストしてみてもいいでしょう。
    • good
    • 0

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