No.2
- 回答日時:
文字列にすればいいじゃない。
=”0000”&A1
これで3桁でも2桁でも問答無用で4桁以上の文字列になります。
そしてこれを右から4文字切り取って、そこから1文字ずつ拾えばいい。
RIGHT関数とMID関数の組み合わせです。
切り取る位置はCOLUMN関数を使って決めてやればいい
=COLUNM(A1)
なら「1」が返ってくる。
式を横方向にフィルコピーして
=COLUNM(B1)
になれば「2」が返る。
ということで、ちょっと考えてみてください。
試行錯誤することで、自分で数式を組み立てる訓練になります。
がんばれ。
早々のご回答ありがとうございます。
最初は
A1の1234を各セルに1桁ずつ抜いて(ここまでは出来ます)これを順列組み合わせで16個?埋めようとしたのですが途中で順列が分からなくなって自信が無くなって・・・
で分かりやすい解が無いかと質問させて頂きました。
No.3
- 回答日時:
なるほど、そういうことですか。
4×3×2×1=24の列が必要になるわけですね。
(16個じゃねえぞ)
1 1234
2 1243
3 1324
4 1342
5 1423
6 1432
7 2134
8 2143
9 2314
10 2341
11 2413
12 2431
13 3124
14 3142
15 3214
16 3241
17 3412
18 3421
19 4123
20 4132
21 4213
22 4231
23 4312
24 4321
を表示させたいって事だね。
自分なら面倒なんで、この表を【参照】させる。
このアルゴリズムを数式で示すとスゲー面倒で冗長になるんだ。
【参照】方法は、
INDEX関数に表を配列としてCOLUMN関数で得た値で選択するとか、
COLUMN関数で得た値をINDIRECT関数に入れて参照範囲にするとか、
COLUMN関数で得た値をOFFSET関数に入れて参照範囲にするとか、
やり方はいろいろある。
で、各桁の数字を参照するセルの値の桁として使う。
1234→ 左から1文字目 & 左から2文字目 & 左から3文字目 左から4文字目
4321→ 左から4文字目 & 左から1文字目 & 左から2文字目 左から1文字目
のようになるよう、
=MID(A1, MID(表参照+0 ,1,1)+0,1) &
MID(A1, MID(表参照+0 ,2,1)+0,1) &
MID(A1, MID(表参照+0 ,3,1)+0,1) &
MID(A1, MID(表参照+0 ,4,1)+0,1)
こんな感じになります。
(分かりやすいように改行しています)
=MID(RIGHT("0000"&A1,4), MID(表参照+0 ,1,1)+0,1) &
MID(RIGHT("0000"&A1,4), MID(表参照+0 ,2,1)+0,1) &
MID(RIGHT("0000"&A1,4), MID(表参照+0 ,3,1)+0,1) &
MID(RIGHT("0000"&A1,4), MID(表参照+0 ,4,1)+0,1)
必ず4桁の数字が入力されるとは限らないから、こんな感じにした方が良いのかな。
MID(表参照+0 ,1,1)+0
などの「+0」は文字列を数値に変換するための横着です。
本来は
N(MID(N(表参照) ,1,1))
のようにすべき。
’表参照’ の部分は上記の ’【参照】方法は、’ を参考にしても良いし、質問者さん独自のアルゴリズムでも良い。
まあ、こんだけでもスゲー面倒な数式になるので、24種類のパターンを書き出すアルゴリズムを含めると意味不明なものになることは理解してもらえると思います。
・・・
なお、「1111」がずらっと並ぶという事ですので、重複を省略するアルゴリズムは考えていません。
A1セルに
1123
と入力されていた場合、1123 1132 1213 1231 2113 2131 2311 3112 3121 3211 などは重複表示されます。
失礼しました。
4X4で16通りと思いましたが順列式4P4で24通りでした。
成る程、と言うかやはりかなり面倒なのですね、と言う感じです。
実際の表には、A2以下 下に数十の4桁の数字が入っているので一覧表は無理だと思い、最初に4桁の数字を、A1に1、B12に2、C1に3、D1に4として、E列に=A1&B1&C1&D1、F列にA1&B1&D1&C1と言うように24個作れば下にコピーで行けると思ったのですが6個位作ったところでGIVE UPしてしまった次第。
A1~D1までの1桁の数字(文字)をランダムに組み合わせて、重複しない24個を抽出するような関数orVBAが無いかと期待したのですが。
No.4
- 回答日時:
>A1~D1までの1桁の数字(文字)をランダムに組み合わせて、重複しない24個を抽出するような関数orVBAが無いかと期待したのですが。
VBAでなら提供可能です。その際の確認事項です。
下記の件、補足をお願いします。
1.4つの数字の中に0がある場合がありますか。
もし、0があると、"0123"と表示すると123と表示されてしまいます。
その為、事前に各セルの書式設定を文字列にしておく必要があります。
2.重複があった場合でも、24ケースを出力しますか。
(例元の数字が1111なら1111を24個出力する)
それとも、1回だけ出力すれば良いのでしょうか。
3.元の数字はA1に4文字あり、B列以降に24個の組み合わせを出力するのでしょうか。
それとも、A1,B1,C1,D1に1文字づつあり、D列以降に24個の組み合わせを出力するのでしょうか。
No.5ベストアンサー
- 回答日時:
VBAになります。
A列~Y列の書式設定は文字列の前提です。
(A1に0123のように入力します。123はNGです)
重複した組み合わせは1度だけ出力されます。
以下のマクロを標準モジュールに登録してください。
Option Explicit
Public Sub 組み合わせ()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim maxrow As Long
Dim wrow As Long
Dim wcol As Long
Dim str As String
Dim dicT As Object
Set dicT = CreateObject("Scripting.Dictionary")
maxrow = ws.Cells(Rows.Count, 1).End(xlUp).Row
For wrow = 1 To maxrow
str = ws.Cells(wrow, 1).Value
ws.Cells(wrow, 2).Resize(1, 24).Value = ""
wcol = 2
Call combi("", str, ws, wrow, wcol, dicT)
dicT.RemoveAll
Next
End Sub
Private Sub combi(ByVal pstr As String, ByVal str As String, ws As Worksheet, wrow As Long, wcol As Long, dicT As Object)
Dim i As Long
Dim ll As Long
Dim str0 As String
Dim str1 As String
ll = Len(str)
For i = 1 To ll
str0 = pstr & Mid(str, i, 1)
str1 = WorksheetFunction.Replace(str, i, 1, "")
If str1 = "" Then
If dicT.exists(str0) = False Then
ws.Cells(wrow, wcol).Value = str0
wcol = wcol + 1
dicT(str0) = True
End If
Exit Sub
End If
Call combi(str0, str1, ws, wrow, wcol, dicT)
Next
End Sub
早々のご回答ありがとうございました。
早々に表の一部をコピーして実行してみたら一発で期待通りに完動(感動)しました。
こんなに短時間でこのロジックのコードが書けることにもっと感動しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ExcelのVBAで、認識しない書式はありますか? 5 2024/02/09 23:49
- Excel(エクセル) エクセル関数に詳しい方教えてください 1 2024/04/10 12:34
- Excel(エクセル) [関数得意な方]教えて下さい・・[困ってます] 4 2024/04/11 12:21
- Excel(エクセル) 【Excel】複数列ごとに取得するセルを変更したい 2 2023/03/23 21:04
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Excel(エクセル) 関数を用いて表示したセルの内容を、見えている形でコピーする方法 2 2022/09/14 16:36
- Excel(エクセル) [関数について]わかる方教えてください 4 2024/04/11 15:08
- Excel(エクセル) エクセルの書式設定の表示形式で設定した文字を文字列としてコピーしたい 1 2022/12/21 10:41
- Excel(エクセル) VBAで “:” を含むセルの特定 2 2023/05/11 16:30
- Excel(エクセル) ある列、或いは、ある行のセル内に存在する全ての数字を小数点第何(例えば、第二)位までの数字までしか表 3 2024/04/29 14:47
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
「覚え間違い」を教えてください!
私はかなり長いこと「大団円」ということばを、たくさんの団員が祝ってくれるイメージで「大円団」だと間違えて覚えていました。
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
ハマっている「お菓子」を教えて!
この世には、おいしいお菓子がありすぎて……。 次何を食べたらいいか迷っています。 みなさんが今、ハマっている「お菓子」を教えてください!
-
Excelの数式の効率化について
Excel(エクセル)
-
Excel 対象のセルに入力が無いとセルに入力できないようにしたい
Excel(エクセル)
-
【関数】スペースがいくつ入った後の文字列を取り出したい
Excel(エクセル)
-
-
4
数字入力後他の文字等が表示される方法について
Excel(エクセル)
-
5
エクセルで日付の入ったセルの月別の個数が知りたい
Excel(エクセル)
-
6
自動入力で今月はMONTH(TODAY())で良いのですが、翌月はどのようにすれば良いでしょうか。
Excel(エクセル)
-
7
Excel 数式バーの情報を、別シートにセル上で表記する方法を教えてください
Excel(エクセル)
-
8
【マクロ】Ifとwith ステートメントにて分からない部分があります
Excel(エクセル)
-
9
セルの数を求めたい
Excel(エクセル)
-
10
Excelで数値を時間数に変換する関数について
Excel(エクセル)
-
11
エクセルを使っていて2024/5/15と入力したのに令和元年とかででるのでしょうか?何か設定分かる方
Excel(エクセル)
-
12
エクセル②
Excel(エクセル)
-
13
エクセルのクイックアクセスツールバーには何を登録したら良いですか?罫線を引く「格子・枠なし・外枠」と
Excel(エクセル)
-
14
エクセルの関数について教えてください
Excel(エクセル)
-
15
エクセルで表
Excel(エクセル)
-
16
在庫管理表に使うエクセルの関数が分かりません
Excel(エクセル)
-
17
Lookup関数
Excel(エクセル)
-
18
エクセルで現場ごとに機材の移動状況を一覧にしたいのですが、どうすればいいかわかりません。
Excel(エクセル)
-
19
エクセルをエクセレントに究める
Excel(エクセル)
-
20
Excelで特定の文字列が含まれているか確認したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字列から英数字のみを抽出す...
-
SUMIF関数で、「ブランク以外を...
-
自分の左隣のセル
-
エクセル1行おきのセルを隣の...
-
エクセルで、指定の値よりも大...
-
エクセルで特定のセル内にだけ...
-
セルを結合した時のエクセル集...
-
エクセルで、A2のセルにA3...
-
EXCELでマイナス値の入ったセル...
-
同一セル内の重複文字を削除し...
-
Excelで大量のセルに一気に関数...
-
エクセル関数/任意の桁数の数...
-
excelで、空白を除いてデータを...
-
EXECL バーコード生成でBarCode...
-
週の労働時間を計算するエクセル
-
【Excel】4つとばしで合計する方法
-
EXCELのcountif関数での大文字...
-
VBA セルをダブルクリック→違...
-
AVERAGE関数とINDIRECT関数を使...
-
セルの結合がされた表をHLOOKUP...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字列から英数字のみを抽出す...
-
SUMIF関数で、「ブランク以外を...
-
エクセル1行おきのセルを隣の...
-
自分の左隣のセル
-
エクセルで、指定の値よりも大...
-
エクセルで特定のセル内にだけ...
-
セルを結合した時のエクセル集...
-
同一セル内の重複文字を削除し...
-
エクセルで、A2のセルにA3...
-
EXCELでマイナス値の入ったセル...
-
EXCELのcountif関数での大文字...
-
条件付き書式の色付きセルのカ...
-
excelで、空白を除いてデータを...
-
エラー「#REF」の箇所を置き換...
-
Excelで大量のセルに一気に関数...
-
週の労働時間を計算するエクセル
-
エクセルで年月日から月日のみへ
-
一時間当たりの製造数を調べた...
-
【Excel】4つとばしで合計する方法
-
EXECL バーコード生成でBarCode...
おすすめ情報
あっ、すいません。
A1に1234と入っていたら、B1には1243、C1に1324・・・というようにA1に入っている4つの数字で構成される4桁の数字全てを列記したいのです。
A1の数字は重複もありですので、1111の場合はB列以降に1111が並ぶ感じでもOKです。
条件抜けがあり申し訳ありません。
1.0は存在します。
数字なので123でOKですが、4桁あった方が簡単なら文字列にします。(最後は数字に戻します)
2.重複した数字は不要です。
当方のレベルではVBAで重複確認が必要かと思い機械的に処理して同じ数字が24個並んでもOKとしました。
重複許容と削除で どちらが簡単かは想像できませんので簡単な方で結構です。
3.実際の表はA1に4桁の数字が入っています。
B列以降に24個の組み合わせを出力出来れば一番ありがたいのですが、例えばA列をAA列にコピーして、=LEFT関数でA1~D1に1文字ずつ分割することは出来ますのでどちらでも結構です。
今更ですが行列逆にして、24個の合成数字を各列の下方向に表記してもOKですのでやり易い方で結構です。
VBAが良く分かりませんの縦と横でやり易い、やりにくいが有ればの話です。