トップページtech
1002コメント361KB

Excel VBA 質問スレ Part41©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net2016/04/27(水) 04:11:46.79ID:Nk+oP5xR
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part40
http://echo.2ch.net/test/read.cgi/tech/1455817784/

※関連スレ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://echo.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 122
http://echo.2ch.net/test/read.cgi/bsoft/1461287268/
0446デフォルトの名無しさん2016/06/02(木) 22:34:27.71ID:W5gwkCTf
>>440
他にはワードリストを工夫する
あ→い
い→う
のリストではなく
あい→いう
のリストを追加して
文字列の長い順に置換処理するとか
0447デフォルトの名無しさん2016/06/02(木) 22:40:12.20ID:I8wr9FkH
>>444
その2つはもちろん入れています。
処理範囲は沢山のシートの沢山の範囲で、置換ワードも沢山なので配列使わないのはなんとか避けたいです。

今はセル範囲を二次元配列1と2に入れて、配列2を置換し、配列1と配列2の値が違ったらその番地だけセルに代入するよう組んでいます。

FIND関数とLEN関数で置換した文字列の開始文字数と終了文字数を記録して、次の置換対象がその範囲内に被っていたらreplaceを回避
というのも考えたのですが、これもひとつの値に同じ置換が複数回発生した時に2個目以降が回避できないです。
0448デフォルトの名無しさん2016/06/02(木) 22:41:12.82ID:uPQC6lrS
>>445
あい→AB
いう→XY
っていう置換リストがある場合、
"あいう"
はどうなるルールなの?
0449デフォルトの名無しさん2016/06/02(木) 22:45:06.67ID:W5gwkCTf
文字列だけでなくその何文字目が置換すみかも管理しないとダメかもね
0450デフォルトの名無しさん2016/06/02(木) 23:05:21.74ID:27mXebeA
あ、これでいけるかな?

1. 絶対に使われていないであろう文字を一つ用意する(ゑ、ゐとか)
2. 一応全処理範囲にその文字が存在しないか検査する
2a.あったらアラート出して止める
3. 置換ワード1は「ゑ@ゑ」、置換ワード2は「ゑ@@ゑ」に置換する(@の数は置換リスト数だけ増えるようfor nextで)
4. 本命に置換する

これなら偶然繋がってた元の置換ワードが偶然別の仮置換ワードと一致しちゃう可能性は無い
0451デフォルトの名無しさん2016/06/02(木) 23:08:41.11ID:ZNUdZI3k
>>450
同じこと書こうと思ってたorz
絵文字でもいいね
正規表現でもいいと思うけど2byte文字が使えるかどうかは分からん
0452デフォルトの名無しさん2016/06/02(木) 23:16:43.98ID:W5gwkCTf
>>450
ワード1はゑ1ゑに
ワード2はゑ2ゑに
ワードnはゑnゑに置換でも良いかも
nを配列の添字とかdictionaryのkeyにすればいい
0453デフォルトの名無しさん2016/06/02(木) 23:47:31.70ID:I8wr9FkH
>>450自分ですが、いけそうですね
明日試してみます
皆さんご意見ありがとうございます
0454デフォルトの名無しさん2016/06/03(金) 00:05:59.50ID:WMPHIHXe
>>448
そういうのは想定していないんじゃない?
0455デフォルトの名無しさん2016/06/03(金) 00:15:28.22ID:3+Y90JKR
リストの最初の方が優先順位が高いと言うルールで良いんじゃないか
先に変換したらその後は変換対象にしない
あいう→ABう
になる
0456デフォルトの名無しさん2016/06/03(金) 00:59:00.12ID:YNoAy0SK
ある業務入力ソフトのデータが、きちんと正しく打ち込まれているかを確認するVBAを作りたいのですが、プログラミングの経験が薄いため、どういう発想で作ればいいか相談させて下さい。

A列には名前が入っています。
B列には日付が入っています。
C列には開始時刻が入っています。
D列には終了時刻が入っています。
E列にはタスク名が入っています。

丁度、以下のような感じです。
鈴木 6/2 11:00 11:30 タスクX
佐藤 6/2 10:30 12:00 タスクY
...

このデータについて、毎日、全員、全てのタスク(X、Y、Zとする)が漏れなく重複なく入力されていて、更にタスク毎に開始と終了もテンプレートに沿って(Xは11:00-11:30、Yは10:30-12:00、のように)入力されているかの確認をしたいのです。

要は、
鈴木 6/2 11:00 11:40 タスクX
となっていれば、11:40の入力ミスが分かるようにしたい。

鈴木 6/2 11:00 11:30 タスクX
鈴木 6/2 11:00 11:30 タスクX
鈴木 6/2 10:30 12:00 タスクY

となっていれば、「タスクXの重複」と、「6/2のタスクZの抜け」が分かるようにしたい。


という感じなのですが、やりたい事が伝われば、すみませんがご教授願います。よろしくお願いします。
0457デフォルトの名無しさん2016/06/03(金) 01:27:49.22ID:p2nW9YpX
「Range.Find , FindNext は検索の終端を検知できずループしてしまうから
最初のアドレスと比較することでループを抜ける条件にしてる」

というのを上のコメントで拝見したのですが、
例えば最初に列指定でFindした際にIf文でNothingの場合どうするのかというのを
いれると思うのですが、検索の終端を検知できずループしてしまうのであれば、
If文までいかずにFindの所で永久ループしてしまう気がするのですが、そうならないのは
何故なのでしょうか?
0458デフォルトの名無しさん2016/06/03(金) 01:37:33.93ID:SESshZ7L
毎日とか全員とかの定義が不明だが、基本的には書いてある通りやるだけなんだが
VBAの問題じゃなくてアルゴリズムもしくはフローの問題

発想は
毎日、全員に対して
 漏れがないかチェック
 重複がないかチェック
全タスクについて
 テンプレートに沿ってるかチェック
を行うだけだが
0459デフォルトの名無しさん2016/06/03(金) 02:02:50.57ID:fVYd85Q0
チケット制・タスク登録なら、Redmine を使えば?
04600gMFQogn2016/06/03(金) 02:48:08.41ID:PdZhxGoZ
いろいろ書いてくれてありがとう
Excelでやる理由はバカでも使えるようにoffice製品のみで完結させておきたいからなんだ

もうちょっと要件整理したり自力で作ってみるわ
またわからないことがあったら聞きに来るかもしれないいが
0461デフォルトの名無しさん2016/06/03(金) 06:26:17.43ID:3+Y90JKR
>>457
一度の実行の間は最初のアドレスを保持しているが
実行が終わると最初のアドレスを忘れてしまうから
0462デフォルトの名無しさん2016/06/03(金) 06:51:34.01ID:p2nW9YpX
>>461
それはFindNextもなのしょうか?
0463デフォルトの名無しさん2016/06/03(金) 06:52:10.03ID:p2nW9YpX
>>461
失礼しました。それはFindNextもなのでしょうか?
0464デフォルトの名無しさん2016/06/03(金) 07:11:10.78ID:PJyaHrdN
>>457
findにおける検索の終端と、
findを利用して自分で組むループの終端を混同してるようだけど、
findは検索範囲内でafter:=以降の部分から範囲内を一通り検索して、
検索対象が一個見つかるか全く見つからないときに検索を終える。
これがfind検索の終端。
それに対してfindでは検索範囲内に複数の検索対象があった時に
一個ずつしか見つけられないからfind next も組み合わせて
自分で組むループの終端は
最初に見つかった検索対象の位置を自前で記憶しておいて
そこまで戻ってきたらそこを終端とするって話。
ゴッチャにしたらダメ。
0465デフォルトの名無しさん2016/06/03(金) 07:33:19.48ID:p2nW9YpX
>>464
ありがとうございます。
複数の検索対象があった時に、FindNextでもFindに置き換えたとしても、
1個づつしか見つけられないから、Do〜Loop文等でアドレスを比較し、
一致するかしないかで終端を作るということですね。
0466デフォルトの名無しさん2016/06/03(金) 07:35:43.26ID:JncqPXc2
>>456
コレクションかディクショナリにタスク名をキーにして、作業情報を登録しておけば良いんじゃなかろか。

キーが登録されていないタスクは行われていないし、作業情報も
配列かコレクションかディクショナリにして登録するようにしておいて、複数データがあれば重複だし、
後で複数の重複があった場合、それも検知出来るし詳細な情報も残しておくことが出来る。
0467デフォルトの名無しさん2016/06/03(金) 08:12:34.05ID:+ITo/Rr7
また Find w
0468デフォルトの名無しさん2016/06/03(金) 13:15:16.45ID:n9h4VBSL
セルA1に=now()
が入って時刻が出ています。

セルB1に3分たったら+1ずつ足して行くVBAをお願いします。
0469デフォルトの名無しさん2016/06/03(金) 13:21:15.51ID:3+Y90JKR
>>468
質問内容は?
0470デフォルトの名無しさん2016/06/03(金) 14:11:58.99ID:fD9s4V2q
Sub A1から3分経過していたら加算()
Application.Calculate
End Sub
04714682016/06/03(金) 15:31:38.25ID:9vEli6cv
すみません。
要は3分たったら1、
次に3分たったら2、
次に3分たったら3、
次に3分たったら4
とセルB1に加算されてゆくVBAを知りたいのです。
分かりにくくてすみません!
0472デフォルトの名無しさん2016/06/03(金) 15:46:55.67ID:Ggdm0BoU
>>471
excel vba timerとかでググれ
ググりかたは知ってよな
0473デフォルトの名無しさん2016/06/03(金) 16:57:20.17ID:fD9s4V2q
=INT(TEXT((A3-A2),"hh:mm:dd")*480)
0474デフォルトの名無しさん2016/06/03(金) 21:58:12.97ID:JncqPXc2
>>471
本当にその要件なら>>473でこと足りるとは思うけど
タイマーによるイベント処理を行いたい訳ではないよね。

そうだとしたらVB6と違ってタイマコントロールはないからAPIを使うことになる。

時間を計ってぐーるぐる回して時間になったら処理をするという手もあるけど、
イベント使った方が何かカッコいい気がするし、
ゲームとか作るとき処理が終わりきれていないと
次のイベントを待つので「ああ、処理落ちだ」って昔のゲームみたいに
趣きのあるものが作れる
0475デフォルトの名無しさん2016/06/04(土) 00:43:24.42ID:x9jX4yju
>>473
それはVBAじゃない
0476デフォルトの名無しさん2016/06/04(土) 06:34:18.01ID:w3l9f/tm
[B1]="=INT(TEXT(A3-A2,""hh:mm:dd"")*480)"
0477デフォルトの名無しさん2016/06/04(土) 13:41:41.17ID:XvYHrNjs
480ってなに?
0478デフォルトの名無しさん2016/06/04(土) 13:51:00.00ID:qmE4Ukk2
>>477
24*60*60/180
Excelでは1日を1で表す
180秒で1増える様に上の値を掛ける
0479デフォルトの名無しさん2016/06/04(土) 18:51:18.35ID:Urj/a8QZ
>>476
どうでもいいけどこれ時刻の書式間違ってね?

"hh:mm:dd" → "hh:mm:ss"
0480デフォルトの名無しさん2016/06/04(土) 19:36:59.18ID:rYWf1jQa
selectとfromとwhereとorderbyを備えたクラスを作ったらLINQみたいに使えて便利かなあ?
0481デフォルトの名無しさん2016/06/04(土) 21:10:02.67ID:laCcMYDZ
>>480
用途があるなら便利じゃないの?
よくわからない質問だなあ…
0482デフォルトの名無しさん2016/06/04(土) 22:25:12.69ID:rYWf1jQa
>>481
ごめんなさい。愚痴です

Obj.select(変換式).from(情報源).where(抽出条件).orderby(大小関係)
ってするべきなんだけど難しくて。

Obj.from(情報源).where(抽出条件).select(変換式).orderby(大小関係)
だったら処理する順通りだから何とかなるけど。
0483デフォルトの名無しさん2016/06/04(土) 23:19:26.57ID:wPHlgGMm
なんか知恵袋で似たようなこと考えてた人いた
sql文て見づらくなる時もあるからこんなのもいいかもね
Dim SqlClass As CreateSql
Dim SqlList As String
Set SqlClass = New CreateSql
Call SqlClass.SqlSelect("テスト用テーブル")
Call SqlClass.SqlWhere("条件", "A")
Call SqlClass.SqlOrderD("条件B")
SqlList = SqlClass.SqlCode
0484デフォルトの名無しさん2016/06/04(土) 23:44:25.98ID:6mTFRE/r
Range("af11").Select

SendKeys "{F2}"
SendKeys "+{up}"
SendKeys "^{c}"

SetCursorPos 1710, 910
' mouse_event 2
' mouse_event 4


セルを選択し、書き込みモード?の状態にしてから内容を全てコピーして
(セルから直接コピーだとペーストさせてくれないソフトを使ってます)
マウスを指定した座標に移動させそこでクリックした後ペースト

というマクロを作りたいのですが、処理が上手くいきません
上記のマウスをクリックさせる を含めないとコピーが上手くいくのですが
マウスをクリック を含めると内容をコピーしてくれてません
原因は分かりますか?
04854822016/06/05(日) 00:07:58.54ID:6XcU5txU
>>483
それって本当のSQLで、SQL文をどうやって作るかっていう問題に見える。

Obj.select(変換式:=2倍).from(情報源:=配列a).where(抽出条件:=100未満).orderby(大小関係:=昇順)
みたいなのを想定してます。
0486デフォルトの名無しさん2016/06/05(日) 00:12:16.96ID:7g2ahIho
セルから直接コピーだとペーストさせてくれないソフトはExcelですか?
0487デフォルトの名無しさん2016/06/05(日) 00:18:38.66ID:O7He+r7K
>>484
クリップボードにデータ取り込みたいならSendKeysよりも
DataObject使った方が楽だと思うけど・・・

Dim d As New DataObject
d.SetText Range("A1").Value
d.PutInClipboard


クリップボードとデータのやりとりをする
https://www.moug.net/tech/exvba/0150091.html
0488デフォルトの名無しさん2016/06/05(日) 00:29:18.79ID:BIV+QBMm
>>487
楽でしたね
ありがとうございます!
0489デフォルトの名無しさん2016/06/05(日) 01:27:52.16ID:pdmfsKht
>>480
これは興味深いですね
Linqやラムダ式をExcelで表現出来たら是非教えてください。
0490デフォルトの名無しさん2016/06/05(日) 08:08:49.61ID:iCXItJy9
モジュールにbyref string変数で渡しモジュール内で
変更しても呼び出し元では変数の中身が元に
戻ってしまいいますがこれは何故でしょうか。
参照で渡せないのでしょうか。
0491デフォルトの名無しさん2016/06/05(日) 08:45:52.53ID:26+uwwbz
>>490
そんなことなった経験がない
ちょっとそのコードさらしてみてよ
0492デフォルトの名無しさん2016/06/05(日) 09:01:09.75ID:VCr+WiRz
>>490
普通に参照渡しで、呼び出し側の文字列も変わる
たぶん作ったコードがバグってる
0493デフォルトの名無しさん2016/06/05(日) 09:33:07.41ID:6XcU5txU
>>490
カッコ付けてない?

Sub changeString(ByRef s As String)
s = "changed"
End Sub

というSubを作って、

s1$ = "original"
changeString s1  ← カッコなし
?s1
changed       ← 変わった

s1$ = "original"
changeString(s1) ← カッコあり
?s1
original       ← 変わらず
0494デフォルトの名無しさん2016/06/05(日) 09:56:32.90ID:iCXItJy9
>>492-493
こういう感じで書いています。

Private Sub CommandButton1_Click()
Dim s as string
s = "a"
StringCheck(s)
End Sub

Function StringCheck(ByRef st As String)
if st = "a" then
  st = "b"
end if
End Function

>>493
かっこをつけてました。
かっこをつけると駄目なんでしょうか?

Cではかっこあっても参照で渡せたような気がします。
0495デフォルトの名無しさん2016/06/05(日) 10:02:00.58ID:VCr+WiRz
>>494
以前議論した内容

(val)の参照が渡されるから

callをつければvalの参照が渡される
0496デフォルトの名無しさん2016/06/05(日) 10:11:20.63ID:3QH2XO7h
前スレのこれ↓かー
http://echo.2ch.net/test/read.cgi/tech/1455817784/356
勉強になった
0497デフォルトの名無しさん2016/06/05(日) 10:18:15.27ID:iCXItJy9
>>495
(val)で渡されてしまうとは予想外でした。
確かにかっこを取ると参照で渡せました。
callでも問題なく渡せました。

>491-495
皆さんありがとうございました!

>>496
前スレで話題にあげたばかりだったのですね。
見ておけばよかった・・・ すみません。
0498デフォルトの名無しさん2016/06/05(日) 14:20:18.87ID:Uhyyv1sV
>>482
便利ですか?
が質問じゃないのか
0499デフォルトの名無しさん2016/06/05(日) 15:24:31.11ID:pdmfsKht
質問です。

シートで1セルの範囲に"Hoge"という名前を付けると
VBA側でRange('Hoge").valueでセル値の内容を確認することが出来ますが、
処理実行中にこのコードに来る前に、他のBookがActiveになると、
このコードが実行されるときにエラーになります。

これはつまりExcel側がら名前を付けた範囲の情報がBookの情報を持っておらず、
シート情報からしか持っていない為に起こる事象だと思うんですが、
ThisWorkbook.Rangeというプロパティは存在しないので
ThisWorkbook.Range("Hoge").valueとも書けないですし、
このコード直前でThisWorkbook.Activateとしても結局は再現性の低いバグになるだけで、
根本的な解決にならないのは分かります。

名前付き範囲を使ったままで何か良い解決策はないでしょうか?
0500デフォルトの名無しさん2016/06/05(日) 15:42:08.47ID:WJNSNmMN
ThisWorkbook.Worksheets(1).Range
0501デフォルトの名無しさん2016/06/05(日) 15:50:22.50ID:pdmfsKht
>>500
Sheet1にそんな名前付き範囲はないって怒られました
0502デフォルトの名無しさん2016/06/05(日) 15:54:11.18ID:3QH2XO7h
>>499
ThisWorkbook.Names("Hoge").RefersToRange
でRangeオブジェクトを取得するのはどう?
0503デフォルトの名無しさん2016/06/05(日) 15:59:35.92ID:TevpUqb3
application.Names.Item(1)
0504デフォルトの名無しさん2016/06/05(日) 16:09:01.41ID:pdmfsKht
>>501
取れました。ありがとうございます!

実は教えて頂く前に名前付き範囲からシート名とアドレスを取得して再構成して
読み出す方法で自己解決したのですが、教えて頂いた方がシンプルですね。
ありがたく使わせて頂きます。

他の方々もありがとうございました。
0505デフォルトの名無しさん2016/06/06(月) 21:15:18.49ID:QZQfQuAS
また質問させてください。

列挙型をPublicで指定すると、確かに外部から指定出来るようにはなるのですが、
他の関数やプロパティのようにモジュール名.列挙型で指定できないみたいです。

他のモジュールで同じ名前の列挙型を指定すると
かぶってしまうと思うのですが、
それはかぶらないように名前を付けるか、
或いは一つモジュールを用意してConstを
プロパティで引っ張るような方法しかないんでしょうか?

やたら一つのモジュールに区分なくConstを詰め込んで使いたくないし、
モジュールが都度増えて行くというのも分かり辛そうなので
何か良い方法があれば教えて頂けるとありがたいです。
0506デフォルトの名無しさん2016/06/06(月) 21:45:31.54ID:Ly2klPtx
>>505
いまのVBAはenumも使えるのか。初めて知った。

試してみたけど、
モジュール名.enum名.列挙子

でアクセスできたよ?
0507デフォルトの名無しさん2016/06/07(火) 07:09:05.47ID:hS8RF9CR
VBAのDo while〜Loopの条件式に論理式って使えないんですか?
AndとかOrです
0508デフォルトの名無しさん2016/06/07(火) 07:30:36.29ID:5Z2R8nag
>>506
ごめんなさい。出来ましたね。
インテリセンスが働かないので出来ないと思い込んでいました。
0509デフォルトの名無しさん2016/06/07(火) 07:31:01.29ID:wxocoQF4
>>507
使えるんじゃない?

使えない具体的な例は?
0510デフォルトの名無しさん2016/06/07(火) 08:18:39.71ID:hS8RF9CR
駄目ですね
大人しくIf文とかと組み合わせます
0511デフォルトの名無しさん2016/06/07(火) 08:31:37.46ID:HU9syj05
>>507
Do While A And B
というコードは使えるけど?
0512デフォルトの名無しさん2016/06/07(火) 08:33:21.12ID:WoNq4aYh
これかな
VBAで、Do Until 〜 loopを使おうとしているのですが、条件式をDo Until Range... - Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q134632328
0513デフォルトの名無しさん2016/06/07(火) 09:04:31.80ID:wxocoQF4
>>507
条件のところを関数にすれば良いよ
0514デフォルトの名無しさん2016/06/07(火) 09:27:12.79ID:TVhUeGo1
使えないと判断した507はどういうやり方したんだろう?
条件式全体を括弧でくくったか、Andの前後の式を括弧でくくってないとかだろうけど、
いろいろ試しそうなものだ・・
0515デフォルトの名無しさん2016/06/07(火) 10:56:27.79ID:hS8RF9CR
Andでやったらできました・・・
AndがOrみたいな役割になるんですね知りませんでした
みなさんどうもでした
0516デフォルトの名無しさん2016/06/07(火) 11:22:54.42ID:HU9syj05
>>515
そうですAndがOrみたいな役割になるんです(白目
0517デフォルトの名無しさん2016/06/07(火) 17:21:47.75ID:UOQYJ0iX
while/untilで条件が逆
Andの否定はOr

まあ、そういうことかと
0518デフォルトの名無しさん2016/06/07(火) 17:27:43.53ID:sZzqt4Xn
すみません、質問です。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_row_del.html
↑のサイトを見て勉強しているのですが、コード例1ではB列が0の行を
削除するようになっていますが、例えばBとCに数値があり、B×Cが
100以上の場合に行を削除するようにするには
 If Cells(i, 2).Value = 0 Then
をどのように書き換えればいいでしょうか。
0519デフォルトの名無しさん2016/06/07(火) 17:59:50.27ID:sOD3zpDI
 If Cells(i, 2).Value = 0 Then
       ↓
 If (Cells(i, 2).Value) * (Cells(i, 3).Value) >= 100 Then
0520デフォルトの名無しさん2016/06/07(火) 18:00:58.86ID:sOD3zpDI
Cellsの外のカッコいらんかったな
0521デフォルトの名無しさん2016/06/07(火) 18:48:59.31ID:sZzqt4Xn
ありがとうございます。
実行した所、実行時エラー13が出てしまいました。
Bの数値に小数点があるのですが、関係ありますでしょうか。
B×CをDに表示させ(Dは小数点無し)、Dを参照させましたが、
同じエラーが出てしまいます。
0522デフォルトの名無しさん2016/06/07(火) 19:02:38.77ID:HU9syj05
実行時エラー13て何だっけ?
0523デフォルトの名無しさん2016/06/07(火) 19:18:16.59ID:Ic9MVfcw
Office TANAKA - Excel VBAの実行時エラー[型が一致しません]
http://officetanaka.net/excel/vba/error/execution_error/error_13.htm
0524デフォルトの名無しさん2016/06/07(火) 19:27:44.96ID:HU9syj05
>>521
>B×CをDに表示させ
この時点でDは数値型に間違いないだろう。それと100を比較して実行時エラー13になるとは・・・
はて?
0525デフォルトの名無しさん2016/06/07(火) 19:58:48.10ID:xO/yIWhK
>>522
書き込むより検索したほうが早くないか
型ノ]不一致
0526デフォルトの名無しさん2016/06/07(火) 20:07:46.69ID:xO/yIWhK
>>521
http://stamp-uploda.com/src/file2030.jpg
ならんが

ついでにBに50、Cに6.5としてCを文字列にしても自動で型変換行って乗算は行われた

ステップインで
 If (Cells(i, 2).Value) * (Cells(i, 3).Value) >= 100 Then
まで進めて、イミディエイトウィンドウで
?Cells(i, 2).Value

?Cells(i, 3).Value
を見れば原因がわかると思う
0527デフォルトの名無しさん2016/06/07(火) 20:12:54.80ID:wxocoQF4
削除するとき行番号の大きい方からforで回したほうが良い
0528デフォルトの名無しさん2016/06/07(火) 21:33:26.82ID:sZzqt4Xn
みなさん、ありがとうございます。
イミディエイトウィンドウで原因が分かりました。
すみません、お騒がせしました。
0529デフォルトの名無しさん2016/06/07(火) 21:37:21.32ID:HU9syj05
>>525
ごめんなさいスマホだとつい億劫で
0530デフォルトの名無しさん2016/06/07(火) 21:38:15.15ID:HU9syj05
>>528
で具体的に何?
0531デフォルトの名無しさん2016/06/07(火) 21:54:06.30ID:xO/yIWhK
>>528
答え教えて〜ちょっと気になる
0532デフォルトの名無しさん2016/06/07(火) 22:02:37.05ID:oC37LPsM
セルの書式が文字列になってたとか数値と思ってたらスペースが入ってて文字列だったとか
0533デフォルトの名無しさん2016/06/08(水) 01:56:48.79ID:2INbON7T
sendkeysの処理が上手くいかないのです
マクロA終了→マクロB起動なら上手くいくのですが
マクロAからマクロBを呼び出す だと失敗します
マクロAを一旦終了させてからBに繋げる方法はないでしょうか
0534デフォルトの名無しさん2016/06/08(水) 02:11:49.12ID:bRA8ZG5u
>>517
単なる自分のつまらない勘違いでした・・・
みなさんに時間取らせて申し訳なかったです
0535デフォルトの名無しさん2016/06/08(水) 02:28:20.54ID:X5C6AThW
>>533じゃあマクロCがマクロAを呼び出して
そのあとマクロBをよんであげれば?
0536デフォルトの名無しさん2016/06/08(水) 09:19:43.97ID:wPaWM/F4
>>533
>マクロAを一旦終了させてからBに繋げる方法はないでしょうか
2行目に答えが・・
0537デフォルトの名無しさん2016/06/08(水) 16:07:47.23ID:2INbON7T
>>535

マクロCでAを呼んだあと続けてBも呼ぶと 全て含めて1つの処理 と見なされるみたいで
AからBを呼び出すのと変わらないです そうなると失敗してしまいます

>>536
一旦処理を終了する為にAの処理の終わりに 1秒後Bを呼び出す のタイマーをセットして
今は使用しているのですが、その1秒が惜しいです。0.1秒だと反応しないです。
タイムラグなしに処理を終わらせ再開する方法はないものかと質問させていただきました。
0538デフォルトの名無しさん2016/06/08(水) 16:15:03.03ID:BHUiZVaK
何がどう失敗してるのか分からん
0539デフォルトの名無しさん2016/06/08(水) 16:34:33.35ID:lKFv6c/R
>>537
どこかのセルにAが動作中か終了かの状態を表示しておいて
Bでそのセルを見てAが終了するまでループして待機するとか
0540デフォルトの名無しさん2016/06/08(水) 17:30:32.12ID:EJkZd8pq
SendKeys ってNumLockが解除されるバグとかあるから嫌い
APIとか使って代替した方がいいんじゃあ・・・
0541デフォルトの名無しさん2016/06/08(水) 19:15:25.42ID:k2i9YcBT
speakメソッドを使ってセルに入ってる英単語/英文を読ませる処理をしているのですが
長めの文を入れて読ませると読み上げてる途中は他のExcel操作が全くできません。
これを防ぐ方法はありますか?
他言語でいう別スレッドで実行させたいのですが。
0542デフォルトの名無しさん2016/06/08(水) 20:02:11.36ID:J4qccP96
>>541
非同期にしたい処理をvbsに逃がすくらいしか・・・
0543デフォルトの名無しさん2016/06/08(水) 20:08:46.59ID:J2Tk6QYU
>>537
それはキーの受け側の問題では?
高速なキー入力に反応出来てないんだと。
0544デフォルトの名無しさん2016/06/08(水) 20:16:02.98ID:k2i9YcBT
>>542
それは具体的にはどうすればいいのでしょうか?
VBAのコードからvbsを使うことはできる?
0545デフォルトの名無しさん2016/06/08(水) 20:27:54.30ID:P+TyVjZj
>>541
ちょっと調べたらSpeech APIなんてものがあるんだね。
面白そうだからトライしてみようかな
■ このスレッドは過去ログ倉庫に格納されています