• ベストアンサー

【.NET】上付き文字の区別

 こんばんは,質問させていただきます. どうぞよろしくお願いいたします.  エクセルシート上の文字をいじる際,もともと上付き文字であったものを 普通の文字にしてしまうことがよくあるのですが,上付き文字かどうかを 判別する方法ってあるのでしょうか??? もともと上付き文字だった部分を上付き文字で返したいだけなのですが...  もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします.

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

できないわけじゃないけど,効率的じゃなさそうだなあ。 #VSTOとか持ってないし,VB.NETでExcelを呼び出すコード書くのが面倒なのでVBAでテストしました。多分VB.NETからでも適切な手段で出来るはず。 検証手段: 1. A1に「あいうえ」と入力し,「え」を上付き文字にした。 2. VBAで以下のコードを実行 'MSDNライブラリによれば 'Cellsプロパティによって取得できる,RangeオブジェクトにはStartとLengthを引数とするCharactersプロパティがあり 'http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range.characters%28office.11%29.aspx 'CharactersはFontインターフェースを返す,Fontプロパティをもち, 'FontインターフェースにはBooleanを返すSuperScriptプロパティがある。 'http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.characters_members%28office.11%29.aspx 'http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.font%28office.11%29.aspx 'Charactersプロパティの第一引数は最初の文字が0ではなく1なので注意する。(個人的にループは0から始めないと落ち着かないのでややソースが回りくどくなっている) 'その範囲に上付き文字が含まれるかどうかではないので '二文字ずつ調べたりすると検出できない。 '一文字ずつ調べるとパフォーマンスに影響が出るかもしれず少し怖い Sub hoge() For i = 0 To Cells(1, 1).Characters.Count - 1 MsgBox (Cells(1, 1).Characters(i + 1, 1).Font.Superscript) Next End Sub

camputer
質問者

お礼

himajin100000 様 できました!どうもありがとうございます. 結局Superscript用の配列を一個用意しました. おっしゃられる通り,パフォーマンスが心配ですが...(^^;)  ご親切な回答をいただけたおかげで理解するのに時間がかからず 非常に助かりました.(補足記入時からのブランクはバグ取りタイムでございますorz) 本当にどうもありがとうございました!

camputer
質問者

補足

 どうもありがとうございます! すぐに試してみてあらためてお礼させていただきます. (今,友人から別のプログラムを作ってくれてと言われてしまい, 残念ながらまだ試せておりません.. せっかくアドバイスいただけておりますのに,お礼を言わせていただくのが 遅くなるのが嫌だったもので...)  ご親切にどうもありがとうございます!

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

NETの質問と言え、どうせExcelApplicationに入ると思うのでVBAの世界に移して言っても良いと思う。 SuperSctipt=Trueで聞ける 上付き文字設定は With ActiveCell.Characters(Start:=3, Length:=1).Font .Superscript = True SuperSctiptは文字単位設定なのでMID関数で第1文字からLEN(セルの値)まで1文字ずつ聞いていく。==>これはMID関数は不可でした。セルのCharacter属性のFontプロパティを指定しないとSuperscript属性は捉えられない。 ーー Characterプロパティがあるから、指定の1文字を捉えられる。しかし一発でSuperSctiptの文字位置は捉えられない。 Sub test01() For i = 1 To Len(x) If Range("A1").Characters(Start:=i, Length:=1).Font.Superscript = True Then MsgBox i & "文字目が上付き" End If Next i End Sub === >上付き文字だった部分を上付き文字で返したいだけなのですが 無茶なことを言ってませんか。データ変更・入力操作の履歴を持ってないとそんなこと(前の状態を)検出できないでしょう。 コードは別にして、その点の理屈はどう考えたのですか。 もともと、上付き文字だった部分はどうすれば判るのか。 >上付き文字の区別、 という質問に摩り替えられる問題じゃないでしょう。 正しいとする原本など別にありますか。

camputer
質問者

お礼

 imogasi様 どうもありがとうございます!なんとかできました. >これはMID関数は不可でした。セルのCharacter属性のFontプロパティを指定しないとSuperscript属性は捉えられない。 >Characterプロパティがあるから、指定の1文字を捉えられる。しかし一発でSuperSctiptの文字位置は捉えられない。  テストまで行っていただけてどうもありがとうございます. imogasi様のアドバイスのおかげでSuperscriptでできることとできないことが 明確だったので,コーディングがスムーズでした. 重ねてお礼申し上げます.  お礼ポイントでございますが,どちらの回答も, 今後閲覧してくださる方にとって申し分ないと感じましたので, 時間優先でつけさせていただきました.どうもありがとうございました!!

camputer
質問者

補足

 どうもありがとうございます! (すぐに試してみたいのですが,友人から別のプログラムを頼まれてしまい, 残念ながらまだ試せておりません.. アドバイスいただけておりますのに,お礼が遅くなるのが嫌だったもので.. 早く試したいーーーorz) 取り急ぎではございますが,再度あらためてお礼させていただきます.  ご親切にどうもありがとうございます!

関連するQ&A