dポイントプレゼントキャンペーン実施中!

概要
エクセルで回文(とまと、しんぶんし、たけやぶやけた、など)を作る関数を組みたいです。


詳細
セルA1に任意の文字数の文を入力すると、セルB1にそれを逆からならべた文を自動的に表示するような関数を組みたい

自分で途中まで考えてみましたが、任意の文字数、ってところが難しい所ですね。
また、できれば入力セル、出力セル、ともにひとつのセルで済ませたいです。
1セル1文字ならば簡単ですよね。


1セル1文字に縦書きにするとしたら
B列に

セルB1=A10
セルB2=A9
セルB3=A8
セルB4=A7
セルB5=A6
セルB6=A5
セルB7=A4
セルB8=A3
セルB9=A2
セルB10=A1

とするだけです。
ネコでもできますわな。(笑)

入力セル1個、出力セル1個にしないとカッコよくないですね。

次に考えたのが、len関数でセルA1の文字数を検知して、それを引数にしてleft,raight,mid関数で文字を取り出そうと思ったのですが、文字数が増えるごとに関数が1個必要になるので、とても任意の文字数に対応できませんでした。

あらかじめ関数として用意されていませんかねえ?
文を逆転させる関数って。

どなたか、エクセルに詳しい方、お願いします。

A 回答 (2件)

こんばんは!


関数でやるとなると文字数だけオートフィルが必要になると思います。

そこでVBAになってしまいますが・・・
一例です。
画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストしてA列にデータを入力してみてください。

Private Sub Worksheet_Change(ByVal Target As Range) 'この行から
If Intersect(Target, Columns(1)) Is Nothing Or Selection.Count <> 1 Then Exit Sub
Dim k As Long
Dim str, buf As String
For k = Len(Target) To 1 Step -1
str = Mid(Target, k, 1)
buf = buf & str
Next k
With Target.Offset(, 1)
.Value = buf
If Target = Target.Offset(, 1) Then
.Offset(, 1) = "○"
Else
.Offset(, 1) = "×"
End If
End With
End Sub 'この行まで

※ 「よのなかばかなのよ」等々色々入力してみてください。

ご希望の方法でなかったらごめんなさいね。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます。
関数だけだと難しいんですね。

お礼日時:2012/03/04 23:08

ワークシート関数では辛そうですが(文字列反転関数がもともとあるかどうかは調べてません・・)、ユーザー定義関数(VBAマクロ関数)というのを作れば簡単です。



Visual Basic Editorを開いて、該当Bookに標準モジュールを新たに挿入します。
その標準モジュールに下記のような関数を書きます。
↓↓↓
Function 文字列反転(文字列 As Variant)
For i = Len(文字列) To 1 Step -1
文字列反転 = 文字列反転 & Mid(文字列, i, 1)
Next
End Function
↑↑↑

Visual Basic Editorを閉じ、元のワークシートでA1に元の文字列を入れたとして、B1に今作成した関数を書きます。

=文字列反転(A1)

Visual Basic Editorの細かいところは端折って説明しているので、不明点は検索するなどしてみてください。
このあたりが参考になるかもしれません:http://www.konomiti.com/Ex_kan_05.html

なお、上に示した関数では反転した文字列を表示するだけですが、「しんぶ」を入れたら「しんぶんし」と表示するような関数も、ちょっと工夫すれば簡単にできます。チャレンジしてみてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
関数だけだと難しいんですね。

お礼日時:2012/03/04 23:07

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