- ベストアンサー
EXCELの数字入力で…
特定の数字。と言うか自分の場合は 4と9の無い連続した数字を入力したいのですが いい方法はないものでしょうか? 例を書いておくと 1.2.3.5.6.7.8.10.11…38.50.51…88.100…388…500… といった感じで数字入れたいのですが… よろしくお願いします。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
#4です。 >40なども避ける 関数で考えたが、複雑になるので、VBA向きの問題だと 考え作ってみました。 Sub test01() i = 1 j = 1 p02: s = Trim(Str(i)) '文字列に変換 p = InStr(s, "4") If p <> 0 Then GoTo p01 p = InStr(s, "9") If p <> 0 Then GoTo p01 Cells(j, "A") = i 'A列にセット j = j + 1 If j > 500 Then Exit Sub '500行まで p01: i = i + 1 GoTo p02 End Sub ツール-マクロ-VBEでVBE画面になる。その画面の メニューの挿入-標準モジュールで出てくる「General」とある部分の下のフレーム(四角スペース部分)へ、上記をコピペする。 F5キーで実行される。アクチブにしているSheetのA列に番号が入る。 (テスト済み)
その他の回答 (8)
- sanori
- ベストアンサー率48% (5664/11798)
#1&#2です。 エレガントなやり方ではないですが、8進法の考え方を忠実に踏襲したやり方で、5桁まで発生させる方法の例を具体的に示します。 ご質問の数字の表を作ったときに、n番目に来る数を求める方法です。 セルB7 好きな数n(十進法)を入れる セルD7 =INT(B7/8) セルE7 =MOD(B7,8) :一番下の位の数字(暫定) セルF7 =INT(D7/8) セルG7 =MOD(D7,8) :下から2番目の位の数字(暫定) セルH7 =INT(F7/8) セルI7 =MOD(F7,8) :下から3番目の位の数字(暫定) セルJ7 =INT(H7/8) セルK7 =MOD(H7,8) :下から4番目の位の数字(暫定) セルL7 =INT(J7/8) セルM7 =MOD(J7,8) :下から5番目の位の数字(暫定) セルO7 =IF(E7<4,E7,E7+1) :数字が4以上ならば1を足す(9は元々発生しないので考えなくて良い)=一番下の位の数字(決定) セルP7 =IF(G7<4,G7,G7+1) :下から2番目の位の数字(決定) セルQ7 =IF(I7<4,I7,I7+1) :下から3番目の位の数字(決定) セルR7 =IF(K7<4,K7,K7+1) :下から4番目の位の数字(決定) セルS7 =IF(M7<4,M7,M7+1) :下から5番目の位の数字(決定) セルU7 =FIXED(O7,0) :数値を文字の形式に セルV7 =FIXED(P7,0) :〃 セルW7 =FIXED(Q7,0) :〃 セルX7 =FIXED(R7,0) :〃 セルY7 =FIXED(S7,0) :〃 セルAA7 =CONCATENATE(Y7,X7,W7,V7,U7) :5つの数字(文字)を並べて1つのセルに合体にする(文字形式) セルAB7 =VALUE(AA7) :AA7を数値形式に戻すとともに、上の桁の不要なゼロを除去する(=できあがり) この方法では、任意のn番目に来る数を求めることができ、また、7の行を8の行以下に、ずらずらーっとコピーして、Bの列にオートフィルその他で好きな数を入れれば、連続した数列をABの列に表示することができます。 (空白セルが出るやり方で数列を作ると、桁が大きくなるにつれ、無意味な空白セルが延々と続く箇所が出てきてしまいます。) まあ、私の上記手順は、ださいやりかただと思いますが(笑)
お礼
どうもありがとうございました がんばってコピペしたらちゃんと出てきてビックリ(笑) なんとなく8進法にそった感じだとは感じ取れるのですが もちろん?仕組みはまったく理解できてません(爆死) 数字が出てくれる事が大事だったので…
- imogasi
- ベストアンサー率27% (4737/17069)
#4、#5です。 例えばA列のA1:A1000のセルに、それぞれ1から1000の番号をオートフィルでいれる。 A1セルに =IF(OR(ISERROR(FIND("4",A1))=FALSE,ISERROR(FIND("9",A1))=FALSE),"",A1) といれて、A1000まで式を複写する。 これで条件に合う番号がB列に残りました。 1000までテストずみ。 B列のセルは空白セルが出来て歯抜け状態ですが、セルの式を消すためB列をB列に値を複写し、B列をソートすれば、上に寄せる(詰める)ことが出来ます。 上記は番号を教えてくれるだけであって、C列以右にデータが既にあるような場合にそれに条件に合った番号を振るのはVBAでないと難しいでしょう。
- HitomiKurose
- ベストアンサー率38% (54/141)
#6です。単純ミス。 式中の A2 は A1 の間違いです。
- HitomiKurose
- ベストアンサー率38% (54/141)
ツール→アドインで、分析ツールにチェックを入れます。 A列に普通に連番1,2,3,4,…を必要なだけ振ります。 B1に =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(DEC2OCT(A2),7,8),6,7),5,6),4,5)+0 と入力。 B1を選択してセルの右下のカーソルが + になるところでダブルクリック。 B列を選択してコピー、値だけ貼り付け(右クリックして形式を選択して貼り付け等、方法はおまかせ)。 A列を削除。 必要な連番が文字列の方が良ければ B1 に入れる式の最後の +0 はいりません。
お礼
ありがとうございました。 なんか、excel自体がインストールしきっていないものがあったみたいで?インストーラーが起動したので試しきれなかったのですが…すみません
- imogasi
- ベストアンサー率27% (4737/17069)
思いつくままに式にしたら出来ました。 直上のセルに1を足して、下1桁が4か9なら、飛び越しするため2を加える。 C列でやったので、C1セルだけは1を入れる。 C2セルに =IF(OR(RIGHT(C1+1,1)="4",RIGHT(C1+1,1)="9"),C1+2,C1+1) を入れ、C3以下に複写する。 ふと見ると#1の補足の「40なども避ける」とあり、それを満たしてないですが、取りあえず上げて、Find関数でなんとかならないか考えてみます。
#2の回答者さんとは別の視点でやってみます。 本来の入力したいシートとは別の作業用のシートのA列で作業することとします。(A1にはタイトルとしてデータなどと入力します。)例えば、A2に1を入力してから、A2:A2000までを選択し、編集=>フィル=>連続データの作成でまず、通常の連続値(4,9含む)を作成します。 B1にはタイトルとしてフラグと入力します。 B2に =AND(ISERROR(FIND("4",A2)),ISERROR(FIND("9",A2))) と入力します。下にコピーします。 A1セルにカーソルがある状態で、データ=>フィルタ=>オートフィルタを選びます。B列のフィルタで"TRUE"を選ぶます。 A列を選んで、編集=>ジャンプ=>セル選択で可視セルにチェックを付けてOKを押します。編集=>コピー(またはCtrl+C)します。 データを入力したいシートに移動して、編集=>貼り付け(またはCtrl+V) こんな感じでどうでしょう?
お礼
ありがとうございました。 でも、自分がちゃんと理解してないせいか?上手くいきませんでした…(遠い目)
- sanori
- ベストアンサー率48% (5664/11798)
あー、なるほど。 どの位にも4と9があってはいけないわけですね。 すなわち、数字の種類を8個だけにするということですね。 それは、8進法と全く同じことですね。 まず、8進法の数を発生させます。 1,2,3,4,5,6,7,10,11,12,13,14,15,16,17,20,21,22・・・ ・・・66,67,70,71,72,73,74,75,76,77,100,101,102・・・ そうした後、各桁の数字を 0→0 1→1 2→2 3→3 4→5 5→6 6→7 7→8 という風に変換すればいいですね。 これもExcelで比較的簡単にできそうな気がしますね。 どうやりましょうか・・・。 もう、さすがに寝る時間なので(笑)また明日。
- sanori
- ベストアンサー率48% (5664/11798)
セルA1,A2,A3,A4,A5,A6・・・・・に 1,2,3,4,5,6・・・・・を入れといて セルB1に =INT(A1/4*5) と入れたのち、 B1をB2,B3,B4・・・・にずらーっとコピーしたら 出来ましたけど・・・。 A列が表示不要であれば、列を隠せばいいです。
補足
ここに続けて書いていいのかな? あの、教わった通りにやってみたのですが 40とかでちゃうんですけど…ずっと4と9の無いままの連続した数字を入れたいのですが…不可能ですかね? 聞きっぱなしですみません
お礼
感動ものでした…どうもありがとうございました 言うまでも無く中身は理解していませんが 言われたとおりにやったら、思ったとおりに出てきて感動!