AIと戦って、あなたの人生のリスク診断 >>

こんにちは。皆様

値の変更をフォームより行いたいのですが、セルに書き込み時
にLISTBOXのChangeイベントが発生してうまくいかないです。

セルに書き込み時Changeイベントを発生させないようにするにはどうすればいいのでしょうか?
セル書き込み時にLISTボックスCHANGEイベントがなぜ発生するのでしょうか?
宜しくお願いいたします。

userform1のなかにTEXTBOX1~3・変更ボタン・listbox1が配置されてます。

textbox1  セルA列
textbox2  セルB列
textbox3  セルC列

変更ボタン (A列 B列 C列に書かれているデータを変更する)

ユーザフォームの一番したにLISTBOX1が配置されてます。


-----------------------------------------

Private Sub CommandButton1_Click() '変更ボタン

With ListBox1
t = .ListIndex
Cells(t + 3, 1) = TextBox1.Text '実行後LISTBOX1Changeイベントが発生
Cells(t + 3, 2) = TextBox2.Text '実行後LISTBOX1Changeイベントが発生
Cells(t + 3, 3) = TextBox3.Text '実行後LISTBOX1Changeイベントが発生

End With

End Sub
-----------------------------------------
Private Sub ListBox1_Change() ’リストボックス内を矢印キーで動かすと値が各テキストボックスに表示される。

With ListBox1  
TargetRow = .ListIndex
TextBox1.Text = .List(TargetRow, 1) 
TextBox2.Text = .List(TargetRow, 2)
TextBox3.Text = .List(TargetRow, 3)
End With

End Sub
-----------------------------------------
Private Sub UserForm_Initialize()
With ListBox1
ro = 0
ro = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
.ColumnCount = 5
.ColumnHeads = True
.ColumnWidths = -1
.RowSource = ActiveSheet.Range("A2" & ":o" & ro).Address(external:=True)
.TopIndex = ro
End With
End Sub

質問者からの補足コメント

  • すみません。書き忘れました。
    LISTBOX1のBoundcolumn、Textcolumnの値はともに1です。

      補足日時:2018/11/25 21:28
  • うれしい

    めぐみん_様
    色々とありありがとうございます。

    列の見出しを付けたければ・・・見出しをつけたいんです。
    なので、RowSourceを使っております。
    Listviewも考えましたが・・・

    代替案の御提示ありがとうございます。

    >代替え案としては必要なデータをリストボックスに表示させ、修正等を行なった
    > ListBoxのデータをシートに上書き

    必要なデータをリストボックスに表示させセルの値を変更せず修正をおこなうってことはできるのでしょうか? (LISTBOXの中身を変更してセルに書き込まないようにするってことですか?)

    また、セルでなく「シートに」上書きする。このイメージとしては必要なデータをLISTBOX内で修正して一括ですべてのデータを書き換える(上書き・書き込む)というということでしょうか?

    以上 宜しくお願いいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/11/26 18:35

A 回答 (6件)

No.5 です。



ヘルプより

●Change イベント
Value プロパティを変更したときに発生します。(← リストボックスでは拡大解釈が必要かも)
・・・
Value プロパティの設定値が変更されると、Change イベントが発生します。この変更がコードの実行、またはユーザー インターフェイスからの操作のいずれからでもイベントが発生します。

●AfterUpdate イベント
ユーザーの操作によって、コントロールのデータを変更した後に発生します。


コードでセルの値を書き換えたことにより
連結しているリストボックスの該当する位置の値が変更されたわけですから
Change イベントは発生します。

AfterUpdate イベント はユーザーが直接クリックするか矢印キーなどで選択する行を変更した場合のみ発生することになります。
    • good
    • 1
この回答へのお礼

bonaron様

お忙しいところありがとうございます。

以下のようなかんじでございましょうか?

>連結しているリストボックスの該当する位置の値が変更されたわけですから
>Change イベントは発生します。

たとえばテキストボックス内の値をかえるとChangeイベントがはしりますので、
テキストボックスのなかにLSITボックスがあるみたいにかんがえればなんとなくわかります。

●AfterUpdate イベント
>ユーザーの操作によって、コントロールのデータを変更した後に発生します。

CHANGEイベントは

  Private Sub CommandButton1_Click() '変更ボタン

 With ListBox1
 t = .ListIndex
 Cells(t + 3, 1) = TextBox1.Text '実行後LISTBOX1Changeイベントが発生
 Cells(t + 3, 2) = TextBox2.Text '実行後LISTBOX1Changeイベントが発生
 Cells(t + 3, 3) = TextBox3.Text '実行後LISTBOX1Changeイベントが発生

End With
 
 Cells(t + 3, 1) = TextBox1.Textを実行しても 「コントロールのデータを変更した」わけではないので発生しない?


以上 宜しくお願いいたします。

お礼日時:2018/11/29 16:58

Change イベント ではなく


AfterUpdate イベント にすれば
余計なイベントは発生しません。
    • good
    • 1
この回答へのお礼

bonaron様
ご回答ありがとうございます。AfterUpdateにしたらうまくいきました。

AfterUpdateで余計なイベントはなぜ発生しないのでしょうか?
CHANGEとの違いをおしえてくださいませ。

お礼日時:2018/11/28 17:15

No.3です。



Buttonにより
・Cells(t + 3, 1) = TextBox1.Text
でセルの1つが変化するとChangeイベントが発生。

TextBox1.Text = .List(TargetRow, 1) 
TextBox2.Text = .List(TargetRow, 2)
TextBox3.Text = .List(TargetRow, 3)

により各TextBoxにはリストデータが代入される。(ただしTextBox1にはボタンのClickイベントの値が、その他には事前にRowSourceで得ているデータが)

あとの部分はその繰り返しみたいなのですが、イベントの発生はボタンのClickイベント1回に付き6回は起きてるみたいです。

>現在 LISTBOX1のBoundcolumn、Textcolumnの値はともに1を設定しており、

私個人はこの設定を用いた事はないですが検索した限りでは複数列の場合に任意の列の値を取得するようです。
書き方が悪いのかダミーデータのミスかエラーが発生して現在設定しないままでやってます。

代替え案の方はまだ手が付けられてはいない状況です。
    • good
    • 0

No.1&2です。



補足コメント読みました。
代替え案としてはそんな感じなのですが、データ量やデータ量に対しての訂正量などから果たして効率がよいかは、実際のデータでの検証ではないので
こちらとしては不安はあります。
敢えてListBoxを使用している点ではデータ数が数千行とは思えないのですが、その辺はいかがな物なのでしょう?
それと改訂が3列だけであるのか実際はもっと多いかで、ListBoxに表示させるリストデータ量も変わるかなと思います。

見出しの代替え案について検索してみた範囲では、横スクロールをさせて表示させないのであれば見出しの所にLabelを重ねてそれっぽく見せると言う
別質問での回答は見かけましたね。
横スクロールをさせないようにするにはやっぱりListBoxには出来るだけ必要最小のデータを表示させるか、ユーザーフォームのサイズ・ListBoxのサイズ調整が
必要となってくるでしょうけど、その辺での不具合(他のControlや画面サイズ等)がありえるかどうかでしょうか。
    • good
    • 0
この回答へのお礼

めぐみん_様

いろいろとおつきあいいただきありがとうございます。

データ数は5列20行ぐらいです。

(ためしに3列でやってます。)

>敢えてListBoxを使用している点では

勉強でございます。

多分5列なんでLABEL表示も可能かと思います。ありがとうございます。
その場合、.RowSourceで範囲指定ではなくLISTプロパティを用いるですよね?


前回記載いただいております下記の件ですが、
.RowSource = ActiveSheet.Range("A2" & ":o" & ro).Address(external:=True)
>セルの値が変わる事でListBoxのリストが変化する為ではないかと。

LISTBOXのChagneイベントが発生条件って「Value」値がかわったらって書いて
あるのですが、現在 LISTBOX1のBoundcolumn、Textcolumnの値はともに1を
設定しており、VALUE値、TEXT値ともに1列目の値が変化したらChagneイベントが発生するという認識ですがなぜ発生しちゃうんですかね?

1列目の値が変化しなかったら発生しないんじゃないのって思うんですが・・・
(あえて一列目を変更せずにおこなってもChangeイベントが発生してしまします。)

お礼日時:2018/11/27 11:13

No.1です。



具体的な回答には届いてませんが、CommandButtonを押す事によりListBoxのChangeイベントが発生している点について、
見解としては、

.RowSource = ActiveSheet.Range("A2" & ":o" & ro).Address(external:=True)

これによりセルの値が変わる事でListBoxのリストが変化する為ではないかと。

列の見出しを付けたければ RowSource を使うしかない。
けど用いればセルとListBoxが直結してしまう。

代替え案としては必要なデータをリストボックスに表示させ、修正等を行なったらListBoxのデータをシートに上書きみたいになるのかな?
と言う位しか今は見つかってないですね。(他にもあるかもですが)
    • good
    • 0

検証せずに回答して申し訳ないです。



Private Sub CommandButton1_Click() '変更ボタン 
のイベントの最初に
Application.EnableEvents = False
最後に
Application.EnableEvents = True

参考:
イベントの発生・無効をコントロール(EnableEvents プロパティ)
https://excelwork.info/excel/bookenableevents/

ではどうでしょうか?
この回答への補足あり
    • good
    • 0
この回答へのお礼

めぐみさん様
お忙しいところご回答ありがとうございました。
Application.EnableEvents = False、
Application.EnableEvents = True をつけてみたのですが動作はいっしょでした。
難しいです。ご回答本当にありがとうございました。w

お礼日時:2018/11/26 11:05

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

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

Q続 こっちもするーしちゃったよぉ

こんばんは

先ほどと同様な質問かもしれませんが、

yahooからオークションサイトをクリックするというものですが
そのなかの処理でオークションリンククリック後 While doc.getelementsbytagname("body").Length <= 0でBODYのレングスが1になるまでループさせるというものですが、
ウオッチウインドウには変数なしでendsub 終了しました。

ただし、①の場所に(wait) 
Application.Wait [Now() + "0:00:01.9"]をつけ再度実行すると
正しく処理されるようになりました。(変数なし→値が入っている)

これは、doc.Links(i).Click後処理が早くてdocumnetオブジェクトが作られていないから
なのでしょうか?


Sub ie_test()

Dim objIE As Object 'IEオブジェクト参照用
'
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "http://www.yahoo.co.jp"

Do While objIE.busy = True Or objIE.ReadyState < READYSTATE_COMPLETE '表示完了待ち

DoEvents

Loop

While objIE.document.ReadyState <> "complete"

Debug.Print objIE.document.ReadyState&; "naka1"

DoEvents

Wend

Dim doc As Object
Set doc = objIE.document

For i = 0 To doc.Links.Length - 1
If doc.Links(i).innertext = "ヤフオク!" Then

doc.Links(i).Click
'Application.Wait [Now() + "0:00:01.9"] '①これをいれるとうまくいく
While doc.getelementsbytagname("body").Length <= 0
Debug.Print objIE.busy
Wend
Exit For
End If
Next

End Sub

こんばんは

先ほどと同様な質問かもしれませんが、

yahooからオークションサイトをクリックするというものですが
そのなかの処理でオークションリンククリック後 While doc.getelementsbytagname("body").Length <= 0でBODYのレングスが1になるまでループさせるというものですが、
ウオッチウインドウには変数なしでendsub 終了しました。

ただし、①の場所に(wait) 
Application.Wait [Now() + "0:00:01.9"]をつけ再度実行すると
正しく処理されるようになりました。(変数なし→値が入ってい...続きを読む

Aベストアンサー

こんばんは。
>これは、doc.Links(i).Click後処理が早くてdocumnetオブジェクトが作られていないからなのでしょうか?

あまり関係ないようです。Clickしたらおそらくステージが変わるのです。
裏技というか、IEイベントにして、変化する場所を監視して、変化した瞬間に次の動作に移る方法もあるのですが、おなじみの
 Do While objIE.Busy Or objIE.ReadyState <> 4: DoEvents: Loop
を一つ入れるだけで劇的に変わるはずです。

具体的には、こんな感じです。実際に動かしていませんから、正確にできるかはこの場では確かめられません。

Dim doc As Object
Set doc = objIE.Document

For i = 0 To doc.Links.Length - 1
 If doc.Links(i).innerText = "ヤフオク!" Then
  doc.Links(i).Click ←リンク先だったら、URLを取って、.Navigate2 URLでもよい

  Do While objIE.Busy Or objIE.ReadyState <> 4: DoEvents: Loop
  '(このように1行にまとめたほうが見やすいです。)
'画面の切り替わりを待ちます。
  'そして、必要に応じて、
  Set doc =objIE.Document を改めて取得しなおします。 <=これを活かすには、ループを抜けるしかありません。
''以下の場合のdoc は、一度しか取っていないので、何回やっても、変わらないです。
'× While doc.getelementsbytagname("body").Length <= 0
  Exit for
  Loop
End If
Next

こんばんは。
>これは、doc.Links(i).Click後処理が早くてdocumnetオブジェクトが作られていないからなのでしょうか?

あまり関係ないようです。Clickしたらおそらくステージが変わるのです。
裏技というか、IEイベントにして、変化する場所を監視して、変化した瞬間に次の動作に移る方法もあるのですが、おなじみの
 Do While objIE.Busy Or objIE.ReadyState <> 4: DoEvents: Loop
を一つ入れるだけで劇的に変わるはずです。

具体的には、こんな感じです。実際に動かしていませんから、正確にできるかはこの...続きを読む

Qオブジェクトの中見からっぽなのにループぬけちゃったーー。どしてぇ??

こんにちは
VBAでIEの処理についておしえてください。
添付ファイルを参照ください。

オブジェクトの取得に失敗する為、上記ループにて
対応しようと考えていたのですが、
オブジェクト変数abの中見が変数なしにも関わらず
下記ループを抜けてしまっているんですが、
原因とかわかるかたいらっしゃいましたら
おしえてくださいませ。

Do while ab Is nothing
on Error Resume next
set ab=objie.document.getelementsbytagname("a")
On Error GoTo 0
Doevents
loop

Aベストアンサー

objieってどこで定義してるんでしょう?こいつが定義も初期化もされてなければ中身は不定なので、何が起きるかわかんないです。まあVBAだからまるっきりでたらめな値ってことはないと思いますけど、まともな内容とも思えません。

Qまちがっているところ

strSQL = " "
strSQL = strSQL & " SELECT "
strSQL = strSQL & " 商品コード, SUM(東京支店) AS TOKO"
strSQL = strSQL & " FROM"
strSQL = strSQL & " ( "
strSQL = strSQL & " SELECT "
strSQL = strSQL & " *"
strSQL = strSQL & " FROM"
strSQL = strSQL & " [3学期$] "
strSQL = strSQL & " UNION ALL "
strSQL = strSQL & " SELECT "
strSQL = strSQL & " *"
strSQL = strSQL & " FROM"
strSQL = strSQL & " [2学期$] "
strSQL = strSQL & " ) "
strSQL = strSQL & " GROUP BY 商品コード"
まちがっているところおしえてくれませんでしょうか

strSQL = " "
strSQL = strSQL & " SELECT "
strSQL = strSQL & " 商品コード, SUM(東京支店) AS TOKO"
strSQL = strSQL & " FROM"
strSQL = strSQL & " ( "
strSQL = strSQL & " SELECT "
strSQL = strSQL & " *"
strSQL = strSQL & " FROM"
strSQL = strSQL & " [3学期$] "
strSQL = strSQL & " UNION ALL "
strSQL = strSQL & " SELECT "
strSQL = strSQL & " *"
strSQL = strSQL & " FROM"
strSQL = strSQL & " [2学期$] "
strSQL = strSQL & " ) "
strSQL = strSQL & " GROU...続きを読む

Aベストアンサー

No.3です。

列数が一致しないとなっているならSheet構成がそれぞれで違うのではないですかね?(検証すると確かに列数が違うとエラーになる)

その場合それぞれのSheetでSELECTしたいフィールドを明確にする為に

strSQL = " "
strSQL = strSQL & " SELECT "
strSQL = strSQL & " 商品コード, SUM(東京支店) AS TOKO"
strSQL = strSQL & " FROM"
strSQL = strSQL & " ( "
strSQL = strSQL & " SELECT "
strSQL = strSQL & " 商品コード,東京支店" '★
strSQL = strSQL & " FROM"
strSQL = strSQL & " [3学期$] "
strSQL = strSQL & " UNION ALL "
strSQL = strSQL & " SELECT "
strSQL = strSQL & " 商品コード,東京支店" '★
strSQL = strSQL & " FROM"
strSQL = strSQL & " [2学期$] "
strSQL = strSQL & " ) AS 合計"
strSQL = strSQL & " GROUP BY 商品コード"

とフィールド名を記載したらエラーは消えましたよ。

No.3です。

列数が一致しないとなっているならSheet構成がそれぞれで違うのではないですかね?(検証すると確かに列数が違うとエラーになる)

その場合それぞれのSheetでSELECTしたいフィールドを明確にする為に

strSQL = " "
strSQL = strSQL & " SELECT "
strSQL = strSQL & " 商品コード, SUM(東京支店) AS TOKO"
strSQL = strSQL & " FROM"
strSQL = strSQL & " ( "
strSQL = strSQL & " SELECT "
strSQL = strSQL & " 商品コード,東京支店" '★
strSQL = strSQL & " FROM"
strSQL = strSQL & " [3学期$] "
...続きを読む

QVB 2015を使っているときに不可解なことが起こりました。

自分は今VB 2015でアプリケーションを作っています。

その時に起こったことなのですが、ボタンをクリックしたらフォームが最大化するという構文を入れても、そのイベントが発生しなかったのです。

Me.WindowState = FormWindowState.Maximized

これを入れても、アプリケーションを起動してイベントを実行した時に発生しませんでした。フォームの右斜め上にある最大化のボタンも反応しませんでした。
フォームのプロパティを確認してMaximizedがtrueになっていることも確認しました。試しにフォームをロードした時点で最大化するようにもしてみましたが、それでも最大化はしませんでした。

どうすればいいのでしょうか。何卒よろしくお願いいたします。

Aベストアンサー

VB2015のことは知りません。

 設定(プロパティ)を変更したりソースコードを修正した際に保存がされていなくて、設定情報がまだ反映されずに操作しても反応がない・・・だけなのではないでしょうか?

Qif文の判定について

こんにちは。
IF文の判定についておしえてください。

Checkboxにチェックが入っていればTRUE チェックがなければfalseと判定するプログラムです。

実行されたとき、ウオッチリストでみると ctrl.valueの値は「false」となってます。

パターン1では、d1=falseが実行され
パターン2では、d=tureが実行されます。

パターン1はわかりますが、なぜパターン2ではd=trureが実行されるのでしょうか?
よろしくおねがいいたします。

(提示した二つ以上の条件のどれかが成立すれば、実行される理解なのですが・・)


パターン1

For Each ctrl In TargetForm.Controls

If ctrl.Value <> False Then
d = True
Else
d1 = False
End If

Next
パターン2

For Each ctrl In TargetForm.Controls

If ctrl.Value <> False Or ctrl.Value <> "" Then
d = True
Else
d1 = False
End If

Next

こんにちは。
IF文の判定についておしえてください。

Checkboxにチェックが入っていればTRUE チェックがなければfalseと判定するプログラムです。

実行されたとき、ウオッチリストでみると ctrl.valueの値は「false」となってます。

パターン1では、d1=falseが実行され
パターン2では、d=tureが実行されます。

パターン1はわかりますが、なぜパターン2ではd=trureが実行されるのでしょうか?
よろしくおねがいいたします。

(提示した二つ以上の条件のどれかが成立すれば、実行される...続きを読む

Aベストアンサー

TRUE <> "" だから。


ところで、なぜこんなコードになっているの?
予想ではチェックボックスは1つしか無いのに、for each *** in *** の構文を使うなんて。

Q此れ、例によって、MSのミスですか?

添付図上段は、Excel 2013 のヘルプ[CELL 関数]からの抜粋です。
見づらければ、次の URL を参照してください。
http://support.office.com/ja-jp/article/cell-%E9%96%A2%E6%95%B0-51bd39a5-f338-4dbe-a33f-955d67c2b2cf

添付図下段は私が検証した結果を示しています。
標準書式のA列の全セルには 2018/5/3 を入力しています。
A列の各セルに対して同行のB列に示す書式(format)を設定すると、A列は添付図に示す表示になります。
式 =CELL("format",A2) を入力して、此れを下方にズズーッとオートフィルした結果(戻り値)をC列に示しています。

赤地に白抜きした部分がヘルプと齟齬していますよね。
特に戻り値 D5 は何処にも登場しません。(どのようにすれば D5 が得られるのだろう?)

此れらの食い違いは、一体全体どういうことなのか教えてください。

Aベストアンサー

こんばんは。
>「ローカルバージョン」とは日本語で書けば“日本語版”という僅か4文字で済むことでしょ?
>>日本独特とは言わないまでも、アメリカのものとは違うということです。
と書きましたとおり、昔ならともかく、本当に「日本語」版というのが存在するならばです。

いずれにしても、ローカル・バージョンは、オリジナル・バージョンに対する意味です。私たちの使っているものが、厳密に日本語版とは言えないからなのです。それは、内部的に、特に韓国語バージョンは共有する部分が多いので、メニュー表示だけの違いだったという記憶があります。東アジアバージョンは、そう変わらないのではないでしょうか。

それに反して、「フランス語」や「ドイツ語」バージョンしか知りませんが、ヨーロッパの言語に関しては、その国の言語のバージョンは、私たちが使っているものとは大きく違うのではないかと思うのです。関数名自体が違います。そして、このアジア向けでは、Microsoft Office で、一度、問題が発生したことがあるのです。アジア向け(日本だけではない)に、一部の機能を抜いた製品を出荷したことがあるのです。そうしたら、ユーザー側で大変なクレームがついたのです。

>ご承知とは思いますが、私がたまに利用する
>http://answers.microsoft.com/ja-jp
>に投稿しても「そんなことは、Microsoft に問い合わせたら」と言われたことがあります。

これが、英語版でも同じような対応なのです。そもそも、回答者に肩書などいらないと思うのです。それで、最近は、Stack OverFlow サイトを読むことが多いのですが、ここでも解決はしませんね。今は、エクセル・ユーザーでも、一部はかなり上のステージに移ってしまいました。
今度、Excel 2019 では、Python が加わるとも聞きますが、どこまでやれるか分かりません。

問い合わせ先なのですが、間違っていたら申し訳ないのですが、ここのHelp画面の下にメールの送信マークがあります。ヘルプからだと、そこしか思いつきませんでした。

https://support.office.com/ja-jp/article/cell-%E9%96%A2%E6%95%B0-51bd39a5-f338-4dbe-a33f-955d67c2b2cf

No.3さんの
>セルに独自の表示形式が設定されている場合は、セルの表示形式を表すコードが返されます。
#2のマクロ関数の GET.CELL(7, セル)だったら出せるけれども、CELL関数では無理なのではないでしょうか。

こんばんは。
>「ローカルバージョン」とは日本語で書けば“日本語版”という僅か4文字で済むことでしょ?
>>日本独特とは言わないまでも、アメリカのものとは違うということです。
と書きましたとおり、昔ならともかく、本当に「日本語」版というのが存在するならばです。

いずれにしても、ローカル・バージョンは、オリジナル・バージョンに対する意味です。私たちの使っているものが、厳密に日本語版とは言えないからなのです。それは、内部的に、特に韓国語バージョンは共有する部分が多いので、メニュー表示...続きを読む

QプログラミングVBAについてです。 やり方を教えて下さい。よろしくお願いいたします。

プログラミングVBAについてです。
やり方を教えて下さい。よろしくお願いいたします。

Aベストアンサー

何かの課題のようなので、ヒントのみです。

どこがわからないのかも不明で、単なる丸投げ的な質問になっちゃってますが、大きく分ければ
・設問の意味や考え方がわからない
 (プログラミング言語とは関係なくアルゴリズム等の理解の問題)
・コードを作成できない
 (プログラムのフローを考える力と、言語知識の問題)
のどちらなのでしょうね?(両方なのかも)

ひとまず、このあたりが参考になるかも?
(検索すれば他にもいろいろ見つかると思いますが)
長方形積分と台形積分の説明とコード(C言語)
https://www.vcssl.org/ja-jp/code/archive/0001/3000-integral-rectangular/
https://www.vcssl.org/ja-jp/code/archive/0001/3000-integral-rectangular/

VBAでの例
https://excelmath.atelierkobato.com/trapzoid/

おまけ(シンプソン法の例)
http://shimaphoto03.com/program/simpson-vba/

何かの課題のようなので、ヒントのみです。

どこがわからないのかも不明で、単なる丸投げ的な質問になっちゃってますが、大きく分ければ
・設問の意味や考え方がわからない
 (プログラミング言語とは関係なくアルゴリズム等の理解の問題)
・コードを作成できない
 (プログラムのフローを考える力と、言語知識の問題)
のどちらなのでしょうね?(両方なのかも)

ひとまず、このあたりが参考になるかも?
(検索すれば他にもいろいろ見つかると思いますが)
長方形積分と台形積分の説明とコード(C言語)
ht...続きを読む

Q時刻文字列を判定する方法について

こんにちは
時刻文字列を比較する方法についておしえてください。

セルに時刻文字列 9:01とか12:34などが記載されていたら「OK」 
そうでない場合は「NG」となるような判定方法についておしえてください。
例)
12:34 MSGBOX ”OK”
1234  MSGBOX ”NG”
宜しくお願いいたします。

Aベストアンサー

どこかのセルに ”OK” または ”NG” と表示させたいなら…
例にある表示が、
 13:56
の書式であること【だけ】を対象としているなら、
 =IF(CELL("format",A1)="D9","GOOD","NG")
でOK。
 12:34:56
の書式なら「D9」の部分を「D8」にすればいい。

CELL関数について調べてみると幸せになれるかもしれません。

・・・
もしも入力時に ”時刻” 以外は弾きたいと言うのであれば「入力規則」で ”時刻” を指定してみましょう。
そして ”時刻” 以外の入力がされた時に返す「エラーメッセージ」を設定すれば良い。

Qこんばんは。いつもお世話になっております。 数値が任意の数ある場合に小さい順に並び替える処理をvba

こんばんは。いつもお世話になっております。

数値が任意の数ある場合に小さい順に並び替える処理をvbaで作成したいですが、どなたか教えて頂けないでしょうか?

どうぞ宜しくお願い致します。

Aベストアンサー

No2のレイアウトの画像です。

Qデータの抽出について(VBA)

※VBAを勉強中の初心者です。

エクセルのA6以降の行に人物名、B6以降の行にその人物の説明文を表にしたものがあり、説明文中に含まれるワードを入力すると、該当する人物とその説明文が上詰めで表示(該当しないものは非表示)されるようにしたいと考え、それをVBAで書こうとしています。

ワードを、
①E2セルのみに入力したとき、E2のワードを含む説明文とその人物のみを表示。
②E2とE3セルに入力したとき、E2のワードかつE3のワードを含む説明文とその人物のみを表示。
③E2とF2セルに入力したとき、E2のワードまたはF2のワードを含む説明文とその人物のみを表示。

のようにしたくて、以下のように書きました。
しかし、下記プログラム3行目でコンパイルエラーが出ました。

文法が間違っているのか、そもそも、Select Case文を使うこと自体が不適切なのか、調べてもわからないので教えてください。

以下、試しにSelect Case文を使って書いたものですので添削して頂けないでしょうか。
投稿前はプログラムの改行や行前のスペースを空けていますが、投稿後なぜか反映されません、無視してください。

Option Explicit
Sub オートフィルターによる抽出()
Select Case Range("E2").Value, Range("E3").Value, Range("F2").Value
Case Is Range("E2").Value
Range("A6").AutoFilter Field:=1, "*" & Range("E2").Value & "*"
Case Is Range("E2").Value and Range("E3").Value
Range("A6").AutoFilter Field:=1, "*" & Range("E2").Value & "*",Operator:xlAnd "*" & Range("E3").Value & "*"
Case Else Range("E2").Value and Range("F2").Value
Range("A6").AutoFilter Field:=1, "*" & Range("E2").Value & "*",Operator:xlOr "*" & Range("F2").Value & "*"
End Select
End Sub

※VBAを勉強中の初心者です。

エクセルのA6以降の行に人物名、B6以降の行にその人物の説明文を表にしたものがあり、説明文中に含まれるワードを入力すると、該当する人物とその説明文が上詰めで表示(該当しないものは非表示)されるようにしたいと考え、それをVBAで書こうとしています。

ワードを、
①E2セルのみに入力したとき、E2のワードを含む説明文とその人物のみを表示。
②E2とE3セルに入力したとき、E2のワードかつE3のワードを含む説明文とその人物のみを表示。
③E2とF2セルに入力したとき、E2のワ...続きを読む

Aベストアンサー

No3です。
>度々申し訳ございませんが、"国会"ではダメで、"*国会*" としなければならない理由を、もう少し詳しく解説お願いできないでしょうか?

あなたの質問の内容で
Range("A6").AutoFilter Field:=1, "*" & Range("E2").Value & "*",Operator:xlAnd "*" & Range("E3").Value & "*"
となっていますが、
Range("E3").Valueの値が、"国会"なら "*国会*"となりますよね。
それ故、"*国会*" としなければならない理由は、ご存知かと思ったのですが・・・・・・。

あなたの現状の理解の程度が不明なので、基本的なことから説明しますが、(判り切ったことかも知れませんが)
*は、ワイルドカードといって、どのような文字にもマッチすることを示します。(下記参照)(トランプのジョーカーのようなもので何のカードにもなるようなものです)
https://qiita.com/aqril_1132/items/9bf905bbda718372b36a

もし、ワイルドカードを使用しないで、”国会”とすると、
B列の内容が、"国会"と全く同じでないと、マッチしません。(マッチしないと表示対象外となります)
その為、B10の内容が、"熊本県出身の国会議員"となっていると、マッチしません。
これは、望んだ結果ではないでしょう。

"*国会*"になっていると、文字が、「任意の文字+国会+任意の文字」の組みあわせならOKなので、B10の内容にマッチします。
その為に、"*国会*"とします。

余談ですが、
"国会*"とすると、必ず、最初の文字が国会で、以降の文字は何でも良いケースにマッチします。
従って、
国会議事堂・・・・マッチする
国会・・・・・・・マッチする
熊本県出身の国会議員・・・・マッチせず
となります。

同様に、"*国会"となっていると、最後が国会で終わっていれば、マッチします。
通常国会・・・・マッチする
国会・・・・・・・マッチする
熊本県出身の国会議員・・・・マッチせず

結局、"*国会*"は、そのセルの中に、"国会"があればマッチします。
通常国会・・・・マッチする
国会議事堂・・・マッチする
国会・・・・・・・マッチする
熊本県出身の国会議員・・・・マッチする

No3です。
>度々申し訳ございませんが、"国会"ではダメで、"*国会*" としなければならない理由を、もう少し詳しく解説お願いできないでしょうか?

あなたの質問の内容で
Range("A6").AutoFilter Field:=1, "*" & Range("E2").Value & "*",Operator:xlAnd "*" & Range("E3").Value & "*"
となっていますが、
Range("E3").Valueの値が、"国会"なら "*国会*"となりますよね。
それ故、"*国会*" としなければならない理由は、ご存知かと思ったのですが・・・・・・。

あなたの現状の理解の程度が不明なので、基本...続きを読む


人気Q&Aランキング