ツイッター出題回答
脱字メーカー(文字列から1文字削除)

ExcelマクロVBAとエクセル関数についての私的雑感
最終更新日:2022-09-06

脱字メーカー(文字列から1文字削除)


ツイッターで出したエクセルの問題です。


誤字脱字は気を付けてもなかなか・・・
今回はエクセル関数で意図的に脱字を作ろうという問題です。
関数は組み合わせかた次第です。


出題ツイート

出題ツイートへのリンク

【エクセル問題】※関数は組み合わせだ編
脱字メーカー
A列の文字列から1字消した全パターンを出力して下ください。

Excel エクセル問題 脱字メーカー


引用リツイートでの回答

引用リツイート



出題者としての解答

解答ツイートへのリンク

REPLACE関数を使うのが一番分かり易いと思います。
=REPLACE(A1,SEQUENCE(,LEN(A1)),1,"")
SEQUENCE関数で1,2,...と連番を作成し、脱字させる位置をずらします。
SEQUENCE関数の連番を横配列にすることで横にスピルします。

Excel エクセル問題 脱字メーカー


スピル以前のバージョンで、かつ配列数式も使わずに数式を書くなら。
=IF(COLUMN()-1>LEN($A1),"",REPLACE($A1,COLUMN()-1,1,""))
先のSEQUENCE関数をCOLUMN関数の相対参照に変更しています。
フィルでコピーした時に文字数を超えても良いようにIF関数で判定させました。

Excel エクセル問題 脱字メーカー


最後に最新関数を使って…
=LAMBDA(x,
LET(
L,LEN(x),
vs,SEQUENCE(L),
hs,SEQUENCE(,L),
ar,MID(x,vs,1),

vh,LAMBDA(x,y,IF(x=y,0,x)),
BYCOL(vh(vs,hs),LAMBDA(x,CONCAT(FILTER(ar,x)))))
)(A1)
無駄に難しくしてしまったか😅

Excel エクセル問題 脱字メーカー


分かりづらいのはこの部分でしょうか。
vh,LAMBDA(x,y,IF(x=y,0,x))
この関数にSEQUENCE(L)と,SEQUENCE(,L)、つまり縦配列と横配列を入れることで2次元の配列を作成しています。
BYCOL(vh(vs,hs),LAMBDA(x,CONCAT(FILTER(ar,x))))
この配列をBYCOLで列ごとに処理させてFILTERで0を除いています。

Excel エクセル問題 脱字メーカー


MID(x,vs,1)
これで1文字ずつの縦配列を作成。
この配列をFILTERの引数「配列」に入れて、「含む」に先の2次元の数列からBYCOLで1列ずつ取り出しながら入れていきます。
BYCOL(vh(vs,hs),LAMBDA(x,CONCAT(FILTER(ar,x))))
FILTERの結果をCOCATでつなげて完成です。

Excel エクセル問題 脱字メーカー


前半の数式(REPLACE関数)は、少し慣れれば理解するのはそんなに難しくないと思いますが・・・
後半のLAMBDAはこの説明で解るものでしょうか?
(そもそも数式の書き方が悪いという突っ込みは…とりあえず置いといてください😅)
LAMBDAで数式組んだときの説明って難しいですね・・・




同じテーマ「ツイッター出題回答 」の記事

成績表(ネ申エクセル)を別表に集計
年月に対して有効な日だけの入力規則のリスト作成
8桁数値が日付として不適切なら赤にする条件付き書式
条件付きの最大値と中央値("A"が2文字の条件)
日付時刻のマイナス表示に対応する方法
一覧から複数条件(部分一致、範囲)に合致するデータを抽出する
構成比を合計しても100%にならないと言われた…
振込手数料を先方負担にした時の振込金額と手数料の算出
脱字メーカー(文字列から1文字削除)
リーグ表に対戦番号を振る
数列内の連続偶数のみ順序を入れ替える


新着記事NEW ・・・新着記事一覧を見る

セル値でパス・ブック・シート名を指定|Power Query(M言語)入門(2023-02-07)
別ブックのシートを列可変で取り込む|Power Query(M言語)入門(2023-02-06)
ExcelとVBAの入門解説|エクセルの神髄(2022-12-14)
文字列のプロパティ名でオブジェクトを操作する方法|VBA技術解説(2022-12-14)
数字(1~50)を丸付き数字に変換するVBA|VBA技術解説(2022-11-15)
TEXTAFTER関数(テキストの指定文字列より後ろの部分を返す)|エクセル入門(2022-11-14)
TEXTBEFORE関数(テキストの指定文字列より前の部分を返す)|エクセル入門(2022-11-14)
TEXTSPLIT関数(列と行の区切り記号で文字列を分割)|エクセル入門(2022-11-12)
LAMBDA以降の新関数はVBAで使えるか|VBA技術解説(2022-11-11)
WRAPCOLS関数(1次元配列を指定数の列で折り返す)|エクセル入門(2022-11-08)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.マクロって何?VBAって何?|VBA入門
7.並べ替え(Sort)|VBA入門
8.Excelショートカットキー一覧|Excelリファレンス
9.エクセルVBAでのシート指定方法|VBA技術解説
10.Range以外の指定方法(Cells,Rows,Columns)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ