- ベストアンサー
エクセル 文字列反転
たとえばA1の内容が aiueo のとき B1に oeuia と表示させるにはどうすればいいですか? そういう関数はありますか? ご教示よろしくお願いします
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
見落としていました >選択した各セルの右隣のセルに結果が表示されるようにしたいのですが… Sub test2() Dim rng As Range For Each rng In Selection rng.Offset(0, 1) = StrReverse(rng) Next End Sub
その他の回答 (9)
- hige_082
- ベストアンサー率50% (379/747)
回答は出ているようですが VBA関数に"StrReverse"が用意されていますよ Sub test() Range("b1") = StrReverse(Range("a1")) End Sub 参考まで
- xls88
- ベストアンサー率56% (669/1189)
Sub tes2() Dim c As Range Dim i As Integer For Each c In Selection For i = Len(c.Value) To 1 Step -1 c.Offset(, 1).Value = c.Offset(, 1).Value & Mid(c.Value, i, 1) Next i Next c End Sub
お礼
再度ご回答頂きありがとうございます 実際に試してみましたが カンペキとしか言いようがないですね... 本当にありがとうございます! これだと計算用の冗長なセルが不要ですし汎用性が高いので これを利用して作業を進めたいと思います.
- popuplt
- ベストアンサー率38% (31/81)
おはようございます。No.3です。 >B1 に =IF(A1,B1+1,0) を入れると #VALUE! と表示されます たぶんですが、[#VALUE!]と表示されるのは式を入力する時、A1になんらか文字列が入っていたのではないでしょうか? 循環参照なので、[#VALUE!]が表示されるとA1=1としても、一般機能のようにエラーを解除して再計算されません。 まず、A1を[DEL]で削除してください。それで[B1]が0になれば、A1に1を入力してください。 循環参照はエラー扱いされてほとんど使うことがありませんので、慣れないとなかなか判りにくいですね。 うまく行かないときは、混乱しますのでこの案は無視してください。
お礼
おはようございます.再度ご回答ありがとうございます. もう一度初めからやり直してみたところ,ちゃんと実行できました! 私の操作に不手際があったようです.すみません...
- xls88
- ベストアンサー率56% (669/1189)
参考出品 Sub tes1() Dim i As Integer For i = Len(Range("A1").Value) To 1 Step -1 Range("B1").Value = Range("B1").Value & Mid(Range("A1").Value, i, 1) Next i End Sub
お礼
ご回答ありがとうございます! VBAは不慣れなのでなるべく使いたく無かったのですが お教えいただいたコードをコマンドボタンに割り付けてみたところ あっさり解決しました! 本当にありがとうございます 今のままでは A1 → B1 にしか対応していませんので 任意のセルを複数選択後コマンドボタンを押すと 選択した各セルの右隣のセルに結果が表示されるようにしたいのですが… VBAの参考サイトをご存知でしたらお教え下さい
- tom04
- ベストアンサー率49% (2537/5117)
何度も!何度も!ほんとぉ~!にごめんなさい!m(__)m No.1・4です。 先ほどの黄色の列を削除してしまうと、エラーになってしまいますので 逆文字になった列をA列の方へドラッグして 一文字ずつ入っているセルを見えなくしてみてはどうでしょうか? 尚、一連の操作をマクロに記録しておけば、 データが増えても簡単に出来ると思います。 しつこいくらい顔を出して・・・失礼しました。 それではおやすみなさい。m(__)m
お礼
たびたびご回答ありがとうございます! アドバイスどおり作業したいと思いますがきょうはこれにて... おやすみなさいませ...
- tom04
- ベストアンサー率49% (2537/5117)
たびたびごめんなさい! No.1です! またまた・・・反則技を持ってまいりました! Excel2003での回答ですが、参考までに・・・ すでにA列に文字が入力されている場合ですが。 A列に行挿入してB列にA列すべてをコピーします。 B列すべてを範囲指定して、 データ → 区切り位置 「スペースによって・・・」を選択 →一番文字数の多いところまで区切り位置を一文字ずつ設定してOK ↓の画像であれば、L1セルに K1&J1&I1&H1&G1&・・・という具合に逆から&でつないでいきます。 その後オートフィルでコピー 最後に黄色の列をすべて削除して完了です! 関数ではなく今回もかなり無理矢理って感じですが、 何度もごめんなさい。m(__)m
お礼
再度ご回答ありがとうございます! 画像のおかげでとても分かりやすかったです! ただ,実際のデータはとても長いので,区切りの指定で時間が... しかし現時点ではこの方法が一番良さそうに思えますので 他にいい方法がなければこの方法で行きたいと思います
- popuplt
- ベストアンサー率38% (31/81)
一般的ではないのですが、関数で並べ替えてコピー値貼り付けで文字列に変換する方法です。 循環参照を使うので、オプションの「反復計算を行う」にチェック 回数は適当に「30」(文字数より大きい数字) [B1]=IF(A1,B1+1,0) [D1]=aiueo があるとして [E1]=IF($A$1,MID(D1,$B$1,1)&E1,"") と入力します。 ほかの文字列の横に[E1]の式をコピーしてこれで準備が完了です。 [A1]に1を入力すると文字列が逆転します。 変換した逆文字を[コピー][値貼り付け]をして確定して、「反復計算を行う」のチェックをはずしたほうが無難でしょう。 循環参照になれていないと戸惑いますので参考程度です。
お礼
ご回答ありがとうございます! 試してみたのですがよく分かりませんでした... 反復計算を行うにチェックまでは問題ないのですが B1 に =IF(A1,B1+1,0) を入れると #VALUE! と表示されます それを無視して D1 にデータを入力し E1 に =IF($A$1,MID(D1,$B$1,1)&E1,"") を入れるとここでも #VALUE! と表示されます これは B1 がすでにエラーなので当然ですが... それも無視して A1 に 1 と入れても何も起きません... 循環参照云々の前に何か大きな問題がありそうな気がするのですが...
- gyouda1114
- ベストアンサー率37% (499/1320)
同じように考える方おられるんですね 過去ログです EXCELで文字列の並べかえ http://oshiete1.goo.ne.jp/qa3197571.html
お礼
ご回答ありがとうございます! 同じ質問が過去にもあったのですね 質問検索したのですが自分では見つけられませんでした... もっとスマートな方法がないかと思い質問したのですが 関数で一発でできるようなものではなく 何か一工夫しなければならないようですね 他の方法がないかもう少し待ってから締め切ろうと思います
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! やり方は色々あるかも知れませんが・・・ 今思いつく方法としては、かなり強引ですが、 A1セルの文字をB1セルに表示させるとします。 B1=RIGHT(A1,1)&LEFT(RIGHT(A1,2),1)&LEFT(RIGHT(A1,3),1)&LEFT(RIGHT(A1,4),1)&LEFT(RIGHT(A1,5),1) ただし、5文字の場合の数式です。 他にも簡単な方法の回答があるかも知れませんので 軽く読むくらいにしておいてください。m(__)m
お礼
ご回答ありがとうございます! 文字数が決まっているならご教示の方法でも大丈夫なのですが 実際に扱っているデータはセルによって文字数がまちまちなので... 他にもいい方法があればお教え下さい
お礼
ご回答ありがとうございます! VBAには専用の関数があるんですね エクセルにもあるといいのですが... 専用の関数を使うとかなり簡潔になりますね お教え頂いたスクリプトでも実行してみます