使用しているオブジェクトは
Combo1,Text1,Command1です。

General Declarations ----------------------------
   Dim Sent()
   Dim Count_no()
-------------------------------------------------

Private Sub Command1_Click() --------------------
   Dim i
   Dim Hyouji

   For i = 1 To 3

    If Combo1.Text = Sent(i) Then

    Text1.Text = Count_no(i)
    *******************************
    Else
    Text1.Text = Combo1.Text
    *******************************
    End If

   Next i

End Sub
-------------------------------------------------

Private Sub Form_Load() -------------------------

   Dim Sentence As String
   Dim i
   ReDim Sent(1 To 3)
   ReDim Count_no(1 To 3)

   For i = 1 To 3

     Sentence = "Sentence" & i
     Sent(i) = Sentence
     Count_no(i) = i
     Combo1.AddItem (Sent(i))

   Next i

End Sub
-------------------------------------------------

以上のソースを書いています。
もし"Sentence2"が選択・Command1クリックされたらText1には"2"が表示され、
(ここまでは出来ました)
"12345"と入力・クリックされたら"12345"と表示されるようにしたいのですが、
配列以外の文字を入力した場合の条件(ソースの***内)を加えた途端
Combo1.TextがText1に表示されてしまいます。

条件の書き方が悪いのでしょうか?
ややこしい説明ですみませんが、わかる方、回答お願いします。

このQ&Aに関連する最新のQ&A

配列 文字」に関するQ&A: 文字配列について

A 回答 (1件)

たぶん上記のやり方では、ここまで出来たといわれてる


「"Sentence2"選択・Command1クリックされたらText1には"2"」
にはならないと思います。
Command1_Click部分を以下のように変えてみるのはどうでしょう?
変になったらごめんなさい。
--------------------------------------------
Private Sub Command1_Click()
Dim i
Dim Hyouji

Text1.Text = ""

For i = 1 To 3
If Combo1.Text = Sent(i) Then
Text1.Text = Count_no(i)
Exit For
End If
Next i

If Text1.Text = "" Then
Text1.Text = Combo1.Text
End If

End Sub
--------------------------------------------
    • good
    • 0
この回答へのお礼

ありがとうございます、できました~♪
変になったらだなんてとんでもない。
思っていた通りの結果が出ました。

Text1.Text=""とは・・・。目からウロコです。
そしてExit For・・・、iが100まであって、i=2あたりでSent(i)がヒットしたら
残りのループ数がムダだなぁ、と思っていたので大変ありがたいアドバイスでした。

また機会がありましたらよろしくお願いします(ペコリ)。

お礼日時:2002/02/04 15:16

このQ&Aに関連する人気のQ&A

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

このQ&Aと関連する良く見られている質問

Q全てのクレジットカードを同じ暗証番号にしてたら

私はクレジットカードを7つ持っているのですが、すべて同じ暗証番号です。
なので一つのクレジットカードの暗証番号がばれてしまえば、すべてわかってしまいます。

このような場合、窃盗や空き巣に入られクレジットカードを泥棒に使用された時、
誕生日等には関係ない暗証番号でも
全てのクレジットカードを同じ暗証番号にしてたら、
補償の対象外になってしまいますか?

Aベストアンサー

「誕生日等には関係ない暗証番号」など容易に類推できるモノで無ければ、同じでも問題無い

別の方が望ましいのは事実だが

QSubとEnd Subについて

VBScriptのSubとEnd Subについて教えて下さい。

Dim LogonID
Dim Password
Dim URL
Dim objIE
Dim objINPUT
Dim BodyText
Dim AriNashi

LogonID = "XXXXXXXX"
Password = "XXXXXXXXX"
URL = "https://login.yahoo.co.jp/config/login?.src=www&.done=http://www.ya..."

下記のようなプログラムはうまくいくのですがSubで囲むと何故か動作しなくなってしまいます。
使い方が間違っているのでしょうか?


Set objIE = WScript.CreateObject("InternetExplorer.Application")
objIE.Navigate URL
objIE.Visible = True

Do Until objIE.Busy = False
WScript.sleep(250)
Loop

If objIE.document.URL = URL Then
BodyText = objIE.document.body.innerTEXT
AriNashi = InStr(1, BodyText, "Yahoo")
If AriNashi > 0 Then
Set objINPUT = objIE.document.getElementsByTagName("input")
objINPUT(0).value = LoginID
objINPUT(1).value = Password
objINPUT(2).Click
Else
msgbox "NO"
End If
Else
WScript.Echo " ダ メ" & Err.Description
End If
Set objIE = Nothing

VBScriptのSubとEnd Subについて教えて下さい。

Dim LogonID
Dim Password
Dim URL
Dim objIE
Dim objINPUT
Dim BodyText
Dim AriNashi

LogonID = "XXXXXXXX"
Password = "XXXXXXXXX"
URL = "https://login.yahoo.co.jp/config/login?.src=www&.done=http://www.ya..."

下記のようなプログラムはうまくいくのですがSubで囲むと何故か動作しなくなってしまいます。
使い方が間違っているのでしょうか?


Set objIE = WScript.CreateObject("InternetExplorer.Application")
objIE.Navigate ...続きを読む

Aベストアンサー

Subで囲むとプロシージャとなります。
プロシージャは他から呼び出されない限り、勝手に動作はしません。

Sub Hoge
'実体
End Sub

と書いたなら、プロシージャの外で
Call Hoge()
のようにプロシージャを呼び出してあげてください。

Qデスクトップ上のアイコンが全て非表示に・・・

デスクトップの表示(マイコンピュータ,ゴミ箱etc)がすべて非表示になってしまいました
タスクバーは表示されているのですが、それ以外のデスクトップ上のアイコンがすべて表示しません
どうすれば、元に戻るのでしょうか?
教えてください

Aベストアンサー

http://support.microsoft.com/default.aspx?scid=%2Fdirectory%2Fworldwide%2Fja%2Fkblight%2FT006%2F2%2F23.asp

これですか?

参考URL:http://support.microsoft.com/default.aspx?scid=%2Fdirectory%2Fworldwide%2Fja%2Fkblight%2FT006%2F2%2F23.asp

QReDim PreserveよりもReDimが遅い

こんにちは、配列がいくつまで取得できるのか計算するマクロを作っている時に変なことに気が付きました。
エクセルでフォームとラベルを1つ用意し、下記のようなプログラムをモジュールに書きます。

実行すると、10万ずつ数字が増えていき、数字が1000~2000万超えたあたりで、メモリ不足ですという
表示がでます。
ここで、ReDim PreserveのPreserveをとって、ReDimだけにすると、数字の増え方が目に見えて遅くなります。
ReDim Preserveとしたときは9.5秒ぐらいですが
ReDim の時は 30秒以上かかっています
3台のマシンでテストしましたが、どれも似たような結果になりました
普通に値を保持するredim Preserveの方が遅いと思うのですがなぜこのような結果になるのでしょうか?
ご教授お願いいたします。

Public Sub 配列上限取得計算()
On Error GoTo ErrEnd
Dim i As Long
Const kankaku As Long = 100000

ReDim ans(1 To kankaku) As String
ans(1) = 1
i = 2
UserForm1.Show vbModeless

Do
If i Mod kankaku = 0 Then
DoEvents
UserForm1.Label1 = i
'ここのPreserveをなくすと明らかに遅くなる
ReDim Preserve ans(1 To i + kankaku) As String
End If
ans(i) = i
i = i + 1
Loop
Erase ans
Unload UserForm1
Exit Sub
ErrEnd:
MsgBox "これ以上の配列を設定できません。" & vbCrLf & "上限は" & i & "です。" & vbCrLf & Err.Description
Erase ans
Unload UserForm1
End Sub

こんにちは、配列がいくつまで取得できるのか計算するマクロを作っている時に変なことに気が付きました。
エクセルでフォームとラベルを1つ用意し、下記のようなプログラムをモジュールに書きます。

実行すると、10万ずつ数字が増えていき、数字が1000~2000万超えたあたりで、メモリ不足ですという
表示がでます。
ここで、ReDim PreserveのPreserveをとって、ReDimだけにすると、数字の増え方が目に見えて遅くなります。
ReDim Preserveとしたときは9.5秒ぐらいですが
ReDim の時は 30秒以上...続きを読む

Aベストアンサー

こんにちは、

> ここで、ReDim PreserveのPreserveをとって、ReDimだけにすると、数字の増え方が目に見えて遅くなります。
> ReDim Preserveとしたときは9.5秒ぐらいですが
> ReDim の時は 30秒以上かかっています

 ReDim は 新築
 ReDim Preserve は 増築
という喩で説明になっているかと思います。

実際には、Eraseして、メモリの再割り当てをしつつ、配列のサイズ(ディメンション)を再定義するのがReDim
既存のメモリを維持しつつ、メモリを拡張、サイズを再定義するのがReDim Preserve
ということになります。
必然的にReDimを繰り返したら遅くなります。

ご提示のコードでPreserve キーワードを抜くと、
kankakuごとに、ReDimしている訳ですから、
せっかく格納したそれまでの値を消去していることになります。
可変長のString型変数の場合は特殊で、割り当てられるメモリサイズが固定ではありませんから
格納したり消去(長さ0の文字列を格納)したりするのに特に時間が掛かります。

ご提示のコードでPreserve キーワードを抜くと、
それまでに格納した文字長に比例したメモリサイズ、は無視されてしまいます。
本来の目的から外れたテストになってしまいます。

可変長の変数なのですから、要素数、だけではなくて、
要素数と文字長、の2点について、色々パラメータを変えながら
テストしてみた方がより有意義なものになるのではないかと思います。

 Dim ans() As String
のように一旦、文字列型として、動的配列変数を予め定義しておいた方が
テストの精度が高まりますし、ReDimに掛かる時間も短くなります。

以上です。

こんにちは、

> ここで、ReDim PreserveのPreserveをとって、ReDimだけにすると、数字の増え方が目に見えて遅くなります。
> ReDim Preserveとしたときは9.5秒ぐらいですが
> ReDim の時は 30秒以上かかっています

 ReDim は 新築
 ReDim Preserve は 増築
という喩で説明になっているかと思います。

実際には、Eraseして、メモリの再割り当てをしつつ、配列のサイズ(ディメンション)を再定義するのがReDim
既存のメモリを維持しつつ、メモリを拡張、サイズを再定義するのがReDim Preserve
ということにな...続きを読む

Q使っているSDのデータを別なSDに全て移動するには

現在androidのスマホで16GBのカードを使っていますが、
残りの容量が少なくなってきてしまいました。


なので、32GBのカードを購入しようと思うのですが、
現在使っているSDカードの中にまだ使っているデータが入っているので、
16GBのカードの中身を新しい32GBのカードへとすべて移動させたいのですが、

移動する方法として、一旦16GBのカードの中身をパソコンへすべて移動し、
パソコンへ入れたデータを32GBのカードへと移そうと考えているのですが、

SDに入っている音楽、画像、動画などはそっくりそのまま移動するのは問題ないと思いますが、
アプリなどをSDに移しているものもありますが、そう言ったものもすべてまるっと
コピーしてPCへ移動し、そしてまた新しいカードへすべて選択してコピーして貼り付けで
また普通に使えるのでしょうか?

Aベストアンサー

前に8GB→32GBに変更した際にとった方法。

1.SD保存のアプリを本体へ移動。(念のため)
2.PC側で全てのファイルを表示できるように設定。(システムファイルや隠し属性も全て表示させる)
3.旧SDのデータをPCにコピー。
4.コピーしたデータを新SDにコピー。
5.コピーが終わったら、新SDをスマホに入れて動作確認。
6.一通り動作に支障がなければ、アプリをSDに移動。

元のSDとPCのデータは、しばらくそのままにし、その後何も問題がなければ、消去。

全てのデータがコピーされているのに問題が起きるようなら、スマホ側で一旦フォーマットしてから、上書きコピーしてみる。
その際に上書き確認が出たら、その都度ファイル名と容量を確認し、置き換えるかそのままにするかを判断する。

以上。

Qマクロで100マス計算! Dim i,j As Integer For i = 2 ToRang

マクロで100マス計算!

Dim i,j As Integer

For i = 2 ToRange(”A1”).End(xlDown).Row
For j=2 To Range(”B1”).End(xlToRight).Column

Cells(i,j).Value = Cells(i,1).Value * Cells(1,j).Value
Next j
Next i
Endsub

上記のように記述しましたが、
iの最終行が2となってしまっていますがなぜこのコードが間違っているのか分からないです。。どなたか教えていただけたら嬉しいです!

Aベストアンサー

確認してはいませんが…


>改行、スペースは実際にはきちんととっていますので気にしないでください
とのことなので、違っているのかもしれませんが、

>For i = 2 ToRange(”A1”).End(xlDown).Row
         ↓
 For i = 2 To Range(”A1”).End(xlDown).Row
で、うまくいきませんか?
100マス(10×10)と最初から決まっているので、範囲は 2 To 11 でも良いように思いますが…

改行、スペースなどが正しくなっているなら、Range(”A1”).End(xlDown).Rowの値が2以下になっている可能性が考えられます。(ということは、A1が空白セル、または、A3が空白セルなどなど・・)
A1が空白セルの場合は、
 For i = 2 To Range(”A2”).End(xlDown).Row
とするか、
 For i = 2 To 11
などとすることで、動作するのではないかと推測します。

Qエクセルで開いているファイル全てに関数を適用する方法は無いでしょうか?

エクセルで開いているファイル全てに関数を適用する方法は無いでしょうか?

例えば文字数が3万を超え1つのエクセルファイルに納まらなくてファイルを5つに分けたとします。
そこからLEN関数を使うとなると5つのファイルすべてに「LEN(A1)」と記入しなければならず面倒です。(LEN関数ならまだ簡単ですが…)
そこで、一気にすべての開いているファイルのA1のセルにLEN関数を適用できたら手間が掛からず作業できるのですが
不可能でしょうか?

Aベストアンサー

#1のように、複数シートの問題では無く、別ブックの話ですよね。
社業グループに出来るのはシート間だけ。
http://www.relief.jp/itnote/archives/000144.php
ーー
こんな課題に対して、ぴったりの操作などあるわけ無いと思う。
だから少なくともVBAの利用になってしまうのではないか。
だからアイデアとして考え付いたのは、
(1)式を入れたブックのシートを読んでVBAで式の入ってない同位置セルの数式を移す(書き込む)
(2)値だけを消してコピーし、データを流し込む。
式の在るセルにデータを入れると、式が壊れるので、式のある列と無い列が判然としているような場合で無いとややこしいでしょう。
(3)式は、列方向に一律に複写している場合が多く、思ったほど多様性は無いのではないか。
であれば、あれこれ考えるより、各ブックに再入力(コピーは可)+複写したほうが早いのではないかな。

QMicroSoft BasicのDim文とVisualBasicのDim文の違い

私が20年前にMicroSoft Basicを使っていたときは、DIM文はDIMENSIONの略で配列型変数の宣言に使っていました。

最近VisualBasicの勉強を始めたのですが、変数の宣言はすべてDim文になっており、昔のMS BasicのDim文と意味合いが変わっているのに驚いています。

ここで質問させてください。
・なぜ配列を意味するDimension文が変数の宣言なのか?
・どのバージョンのBasicからDim文の意味が変わったのか?

私が使用していたのはNEC N-Basic,N-88Basic,N-98Basicです。

Aベストアンサー

VISUAL BASIC のDimは ディメンジョンの略です。
私の経験ではVB2.0時代からありました。

配列0を考えた場合変数とおなじであるからだとおもいます

Q韓国では全ての物が日本の半額で購入できるのでしょうか?

円高の影響で韓国のものは全て日本の半額で購入できると聞いたのですが本当でしょうか?
電化製品や宝石もすべて半額なのでしょうか?

Aベストアンサー

こんにちは。

みなさまがお答えのように
1年前と比較して
為替レートでの換算で「1/2」という意味でしょう。

偶然ですが
私自身が
昨年の12月と今年の12月(今月)、
ソウル旅行をしています。

昨年12月は
1000ウォンが140円程度でしたが
今年は
1000ウォンが70円を割っていました。

私自身のこの2回の旅行の比較で言えば
まさしく「半額」になっています。
現実のことなのですが
帰宅してから昨年のクレジットカードの控えと比べて見ても
なにか信じられない思いでした。



韓国で売られている多くの商品は
日本で売られている同等の物と比較して
間違いなく安いと言えます。
ただし、半額まで安いものは少ないです。
パッと思い浮かぶ半額程度のものは・・・
○自販機のカップコーヒー
○コンビニで売られているオニギリ
・・・なんかがあります。

逆に自分に関係あるもので日本より「割高」と思えたものは・・・
○ジョンソン&ジョンソンのワンデーアキュビュー
○焼肉(牛肉)
・・・でした。

こんにちは。

みなさまがお答えのように
1年前と比較して
為替レートでの換算で「1/2」という意味でしょう。

偶然ですが
私自身が
昨年の12月と今年の12月(今月)、
ソウル旅行をしています。

昨年12月は
1000ウォンが140円程度でしたが
今年は
1000ウォンが70円を割っていました。

私自身のこの2回の旅行の比較で言えば
まさしく「半額」になっています。
現実のことなのですが
帰宅してから昨年のクレジットカードの控えと比べて見ても
なにか信じられない思...続きを読む

QFOR文でtext1,text2,text3...などとどうやって処理させればいいのですか

超初心者な質問ですみません。
たとえばFOR文を使ってtext1~10まで連続に処理させるには
どういったコードを記述すればよいのでしょうか?
初心者用の本やHPを探しても見当たりませんでした。
お願いします。

Aベストアンサー

textエリアをインデックス配列にすればいいです。
Text1のエリアをファーム上でコピーし、貼り付けると
Text1(0)~ Text1(9) の配列になります。
それを
 
(例)

i =0
for i=0 to 9
text1(i) = x
next

のようにすればいいです。


人気Q&Aランキング