激凹みから立ち直る方法

いつも大変お世話になっております。

変数(String)にセル範囲が入っています。
例)
TEST(0)="B6:B13"
TEST(1)="B18:B25"
TEST(2)="B30:B37"
TEST(3)="H6:H13"
TEST(4)="H18:H25"
TEST(5)="H30:H35"



これの、同じ列の間のセル範囲を出したいと思っています。
TEST(0)="B6:B13"
TEST(1)="B18:B25" AIDA(0)=B14:B17
TEST(2)="B30:B37" AIDA(1)=B26:B29
TEST(3)="H6:H13"
TEST(4)="H18:H25" AIDA(2)=H14:H17
TEST(5)="H30:H35" AIDA(3)=H26:H29
TEST(6)="H36:H40" AIDA(4)=0


この、AIDAを出すためには
引き算ではダメですよね(Stringのため
何か良い方法があれば教えてください。
よろしくお願い致します。

A 回答 (3件)

こんにちは。



>StringやVariantは2GBまでとありました。
>この場合単純計算で10万文字書けるという考えで
>良いのですよね?(もしかしたら計算違いかもしれません)

私の計算でも、同じです。
昔、試したことがありますが、思いの外、取れました。
本来は、データ型を指定したほうが、大きく取れるようですが、必ずしもうまくいくとは限りません。
お分かりになっていることだと思いますが、それは、Variant型でないといけない時があります。

>その場合、SPLIT後、String型やVariant型に保存し、
>セルに書き出すプログラムを書こうと思ってます!

こちらの方は、試していませんが、なんとかなると思っています。

>>で検索し、いくつか、CLSID(クラスID)が出てきます。
>ひとつしか出てきませんでした。
>また、(既定)しかありませんでした。
>何か使い方がおかしいのでしょうか?

いいえ、ふつうの人は、ひとつだけのはずです。私が今使っている、Win7 には、プログラミング言語は、MSC とか、VB.Netとかあるのですが、今は、Turbo C しか入れていないつもりでいるのですが、それでも、いろいろ入っているらしいのです。もう、あれこれ手を出すのは止めにしたいと思っていますのに、つい、VBAに戻ってきてしまいました。Office 2003は、アンイストールしたのですが、残骸が残っている上に、新たにVB6 Runtimeを入れてしまいました。そのせいだと思います。

それはともかく、ブランクがあってVBA関数などは忘れても、基本的なところは忘れていないものなのですね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

>こんにちは。
こんにちは!

>私の計算でも、同じです。
>昔、試したことがありますが、思いの外、取れました。
>本来は、データ型を指定したほうが、大きく取れるようですが、必ずしもうまくいくとは限りません。
>お分かりになっていることだと思いますが、それは、Variant型でないといけない時があります。
Variant型で無いといけないときが特に思いつきません…うーん、なんでしょう?


>>その場合、SPLIT後、String型やVariant型に保存し、
>>セルに書き出すプログラムを書こうと思ってます!
>こちらの方は、試していませんが、なんとかなると思っています。
では、この方法で色々変更していきたいと思います^^

>いいえ、ふつうの人は、ひとつだけのはずです。私が今使っている、Win7 には、プログラミング言語は、MSC とか、VB.Netとかあるのですが、今は、Turbo C しか入れていないつもりでいるのですが、それでも、いろいろ入っているらしいのです。もう、あれこれ手を出すのは止めにしたいと思っていますのに、つい、VBAに戻ってきてしまいました。Office 2003は、アンイストールしたのですが、残骸が残っている上に、新たにVB6 Runtimeを入れてしまいました。そのせいだと思います。
そうでしたか。
すごいですね・・・色々出来るんですね!
私はVBAもままならないですが…VBAから幅を広げ、どんどん便利なものを作れるようC言語とかも勉強したいと思います!

>それはともかく、ブランクがあってVBA関数などは忘れても、基本的なところは忘れていないものなのですね。
そうですね!私もExcelの関数(便利な部分?)とか、ちゃんと覚えてますね^^

ありがとうございました!

お礼日時:2014/03/10 11:27

こんにちは。



>物理的に動かし?間を考えるのですね!
昔、そんなことをやった覚えがあるので、今回もその手法を使ったまでです。
これは、ソートした時に、手では順に選べるのに、なぜ、マクロでは出来ないか考えた時のアイデアが発端です。

>レジストリエディタをいじると書いてありますが、そこまでしないと使えないものなのですか?
セキュリティの強化された時に、「信頼されていません」の警告が出るようになったようですね。
私がやっていた時代にはありませんでした。もともと、Accessでは、様々なコントロールを使わざるを得なくて、覚えました。今回は、失礼しました。

その上で、レジストリをいじるのは無理ですか?

http://www.ka-net.org/office/of13.html
ここには、Winsoc だけで、他については詳しく書かれていませんが、

手順としては、RegEdit を立ち上げて、
Rich TextBox Control
で検索し、いくつか、CLSID(クラスID)が出てきます。

例:
\HKEY_CLASSES_ROOT\CLSID\{B617B991-A767-4F05-99BA-AC6FCABB102E}
\HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}

そうしたら、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX\Compatibility\
の中で、どちらか該当するものがひとつあるはずですから、それが出てきたら、
右クリックで、データの変更を選び、DWORDの部分で、
16進の部分が、[00000400 ]
になっているはずですから、
それを、[0] にして上げれば、それで警告がなくなります。

他の方法というか、前回書いたように、本来は、変数内で処理してしまい、その後、ワークシートに、吐き出せばよいです。そっちのほうが、ずっと簡単ですけれど、私は、途中からの参加で、TextBox 自体を使う経緯を知らなかったので、こういうRich TextBoxという話の方向になってしまったのです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

色々プログラムを組まれているみたいで
尊敬します^^
私ももう少し上手く組めるようになりたいところです…

>手順としては、RegEdit を立ち上げて、
>Rich TextBox Control
>で検索し、いくつか、CLSID(クラスID)が出てきます。
ひとつしか出てきませんでした。
また、(既定)しかありませんでした。
何か使い方がおかしいのでしょうか?


>他の方法というか、前回書いたように、本来は、
>変数内で処理してしまい、その後、ワークシートに、吐き出せばよいです。
>そっちのほうが、ずっと簡単ですけれど、
>私は、途中からの参加で、TextBox 自体を使う経緯を知らなかったので、
>こういうRich TextBoxという話の方向になってしまったのです。
いえいえ!私の説明不足だと思います。
色々抜けることがあるので^^;

変なことを聞くかもしれませんが、
StringやVariantは2GBまでとありました。
この場合単純計算で10万文字書けるという考えで
良いのですよね?(もしかしたら計算違いかもしれません)
その場合、SPLIT後、String型やVariant型に保存し、
セルに書き出すプログラムを書こうと思ってます!

色々参考になりました^^ありがとうございます!

お礼日時:2014/03/05 17:12

こんにちは。



>引き算ではダメですよね(Stringのため
いいえ、String型とかは関係なく、アイデアとして悪くはないのですが、もっと物理的な方法があるように思っています。あまり数学的に考えても、ややこしくなるような気がします。Excelは、こういうことは柔軟なようです。

'//
Sub FindAida1()
 Dim Test(6) As Variant '本来は、String、元がVariantだったような…
 Dim Aida() As Variant
 Dim i As Long
 Dim j As Long
 Dim Adr1 As String, Adr2 As String
 Dim msg As String
 Test(0) = "B6:B13"
 Test(1) = "B18:B25"
 Test(2) = "B30:B37"
 Test(3) = "H6:H13"
 Test(4) = "H18:H25"
 Test(5) = "H30:H35"
 Test(6) = "H36:H40"
 
 For i = 0 To UBound(Test()) - 1
  If Adr1 = "" Then
   Adr1 = Range(Test(i)).Cells(1).Offset(1).Address(0, 0)
  ElseIf Adr1 <> "" And Adr2 = "" Then
   Adr2 = Range(Test(i)).Cells(1).Offset(-1).Address(0, 0)
   ReDim Preserve Aida(j)
   Aida(j) = Adr1 & ":" & Adr2
   Adr1 = "": Adr2 = ""
   j = j + 1
   i = i - 1 '次を始めとするために、ひとつもどり
  End If
  If Left(Test(i), 1) <> Left(Test(i + 1), 1) Then '列が変わった場合
   Adr1 = "": Adr2 = ""
  End If
 Next i
 ReDim Preserve Aida(j)
 Aida(j) = "0" '終わり
 
 'メッセージの出力
 For i = 0 To UBound(Aida())
  msg = msg & vbCrLf & Aida(i)
 Next i
 MsgBox msg
End Sub

'//

今回の話とは関係のない前の件ですが、VB6 Runtimeの所在とか分かりましたか?

Excel2003をフルインストールすれば、入っているような気がしたのですが、なければ、
たぶん、ここのを使えばよいと思います。MicrosoftのDownloadにもあった気がするのですが、見つかりませんでした。

http://www.vector.co.jp/soft/win95/util/se342080 …
Visual Basic 6.0 SP6 ランタイムファイルVB6.0で作成されたソフトの動作に必要なランタイム(XP,Vista,7 対応、最新SP6)

この回答への補足

色々記載不足でした。
追記の件で、質問させてください。

1.リッチテキストボックスはVB6が入っていないと使えないのか
(他のパソコンがこのExcelを使った場合エラーになりますか?)

2.リッチテキストボックスを見つけて、使えました!
 しかし、
サブジェクトは指定された操作に対して信頼されていません。
 と警告がでます。レジストリエディタをいじると書いてありますが、そこまでしないと使えないものなのですか?
http://www.ka-net.org/office/of13.html

3.作るのが大変そうな場合、テキストボックスorリッチボックス
 以外の方法で作ることも検討しております。
 (そのままセルに記入とか?)

色々お手数をお掛けして申し訳ありません。
また、気にかけてくださってありがとうございます!
助かります^^

補足日時:2014/03/05 13:34
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

物理的に動かし?間を考えるのですね!
列が違う場合は、列の文字列で比較…と メモメモ

ありがとうございました!
物凄くためになりました^^

別の話題ですが、
Excel2003をフルインストールしているとは思うのですが
入っていませんでした。
教えて頂いた所のものをダウンロードしてみました!
ただ、見つかりません…

私が「入っていない」と言っているのは
もしかしたら探し方が悪いのかもしれません。
RichTextBoxって、「ツール」→「参照設定」→「Microsoft RichTextbox」とあると思っています。
でも、そこには無く、ツールボックスを右クリック→その他のコントロール→RichTextboxもありません。
コントロールの追加は違う方法なのでしょうか?

本件とはずれていますが、回答いただけると嬉しいです。
よろしくお願い致します。

お礼日時:2014/03/05 13:19

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