Excel VBA質問スレ Part13at TECH
Excel VBA質問スレ Part13 - 暇つぶし2ch491:デフォルトの名無しさん
09/10/26 20:36:59
>>1の★4に該当しますが、他にいいスレがあったら誘導してください。

Long型の数値からリトルエンディアンByte(4)型に分割したいのですが、どのようにしたらよいでしょうか。
VBだとLong型が8バイトと聞いたので、こちらに質問しました。

よろしくお願いします。

492:デフォルトの名無しさん
09/10/26 22:09:15
1回だけランチしましたが、それっきりで不発です。
どこが変なんでしょ?

CODE

var path='C:/Program Files/Microsoft Office/Office/excel.exe';
var args='';

this.setAttribute('oncommand','this.startProcess("'+path+'","'+args+'")');

this.startProcess=function(path,args){
var file = Components.classes['@mozilla.org/file/local;1']
.createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes['@mozilla.org/process/util;1']
.getService(Components.interfaces.nsIProcess);
file.initWithPath(path.replace(/\//g,'\\\\'));
process.init(file);
process.run(false,[args],1);
}


493:デフォルトの名無しさん
09/10/26 23:13:30
>490

2007は知らんけど2003ならば
Application.StatusBar = False

494:デフォルトの名無しさん
09/10/27 00:26:15
>>491
VBAのLongは4バイトです
8ビットずつマスクとシフトしながら分割してください

495:デフォルトの名無しさん
09/10/27 00:27:36
>>492
VBSはスレチ

496:491
09/10/27 01:21:41
>>494
ありがとうございます。
ただ、そのままするとマイナスの値のときにおかしくなってしまいます。
もうすこし詳しく教えていただけないでしょうか。


497:デフォルトの名無しさん
09/10/27 01:34:34
>>496
MSBだけ別の変数にとっとけばいい

498:デフォルトの名無しさん
09/10/27 01:41:11
492はどうみてもJavaSな件

499:491
09/10/27 16:25:08
>>496
ありがとうござました。
マイナス関係なくできました。
難しく考えすぎてたみたいです。


500:デフォルトの名無しさん
09/10/27 19:39:03
Sub Main()
Dim strPath As String
Dim wkb As Excel.Workbook
Dim wks As Excel.Worksheet
Dim rng As Excel.Range
Dim col As New Collection
strPath = Excel.Application.GetOpenfilename
If strPath = "False" then
Exit Sub
End If
Set wkb =Excel.Workbooks.Open(strPath)
Set wks = wkb.Sheets("Sheet1")
Set rng = wks.Range("A1")
call col.Add(rng)
If Not(wkb Is Nothing) Then
Call wkb.close: Set wkb = Nothing
End If
If col Is Nothing Then
Set rng = col.Item(col.count)
Debug.Print rng.Value
End If
End Sub
'colって、Nothingじゃないの?
'Is Nothingの対象はRange型のcolでは無くて、col自体を対象としてんのかな。

501:デフォルトの名無しさん
09/10/27 20:01:28
Dim col As New Collection

502:デフォルトの名無しさん
09/10/27 22:27:30
XP で2003使ってます。

2003及び2000で動いてくれれば・・

アクセス側から、あるワークシートにおいて、
Set myWKS = myWKB.Worksheets("test")
With myWKS
t = DCount("*", "T1")
.Range("A10").CopyFromRecordset myRS
.Range("A10:D" & t + 9).Select
.Application.ActiveCell.Sort Key1:=Columns("C"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlSortColumns, SortMethod:=xlStroke
    .SaveAs "C:\Documents and Settings\Owner\デスクトップ\sample\テスト作成.xls"
    .End With

という処理を行っています。
アクセスを起動後1回目は、ソートが正常に動きますが、2度目以降はうまくソートしてくれません。

次にこのメソッドを使用するときに、引数を指定しなかった場合は、保存されていた値が使用されます。
と、ヘルプにもあるように、ここにひっかかっているのだと考えていますが、
どうにも原因を突き止められません。
どうぞよろしくおねがいします。

503:デフォルトの名無しさん
09/10/27 23:15:04
解決しました。
理由は先ほどエラーが出ていたときは1度目の実行はうまくいくのにエクセルファイルを閉じても
エクセルのプロセスが残ったままになっており2度目はその影響(?)で失敗していました。

コード自体に問題はなく、参照設定のexcelオブジェクトの優先順位を一つ上にあげてやれば、
正常に2度目以降も動くようになりました。

ただ、凄く不安定な正常性ということなので、根本を解決できる何かがあれば
是非アドバイスおねがいいたします。

504:デフォルトの名無しさん
09/10/27 23:45:25
残ってるのはDBSオブジェクトじゃね
エラー出たときとか終わるときにちゃんと閉じてる?

505:デフォルトの名無しさん
09/10/28 00:36:54
そこでした。
オブジェクト指定をしっかり作ったエクセルアプリケーションにしていなかったり、
いきなり.Rangeにしてたりで、タスマネに5個ぐらいEXCELってありましたw

コード多すぎて無理臭いので、クエリのほうから指定することにしました。
以降はいい加減に組まないように注意せねばでした。

ありがとうございました

506:デフォルトの名無しさん
09/10/28 10:55:56
エクセルのマクロの問題に対する質問はここでいいですか??

507:デフォルトの名無しさん
09/10/28 11:13:24
OK
バージョン書いてね

508:デフォルトの名無しさん
09/10/28 13:01:21
ここは宿題かたずけますスレって考えてもいいんですか

509:デフォルトの名無しさん
09/10/28 13:19:44
>>508
質問の内容とタイミングによる
時間帯と曜日によって、宿題は自分でやれってレスが付くだけのこともあるし
VBA厨が喜んでプログラムを作ってくれることもある

510:デフォルトの名無しさん
09/10/28 13:55:04
とりあえず書いてみます
Excel2003

めっちゃ初歩的です…
Do~LoopかForーNextを使わなければならないみたいです。
1~10までの整数で
偶数の和をD1
奇数の和をE1
に表示せよ です。

511:デフォルトの名無しさん
09/10/28 14:02:20
ExcelはスプレッドシートソフトでVBAの練習台じゃ
ありません。
VBAの練習をしたいのなら、Accessでやれっつーの
(AccessではExcelでやれっていわれるかも)
てなわけで、Active BASICがVBAと文法互換だったら
いいのになとおねだりしよう

【サーバー各所】ActiveBasicその11【冬眠中】
スレリンク(tech板)

512:デフォルトの名無しさん
09/10/28 15:07:11
>>511
あほか。Access持ってる奴なんてごく少数だろうが。

513:デフォルトの名無しさん
09/10/28 15:22:58
ACCは初めにオブジェクトアクセスを経由する必要があるから、VBAの初学には向かないよ、と思ってる
エクセルなら(初めの内は)オブジェクト志向を意識しないでコードが組める上、マクロの記録がある
マクロの変換じゃなくて、操作をVBAに変換するから、体感出来る点が非常に優位

逆に初めからRecordset操作を理解したほうが後が楽かもしらんけども

514:デフォルトの名無しさん
09/10/28 16:37:27
>>513
VBA扱う場合はやっぱフォームから入るべきだろ。
テキストボックスで入出力でいいじゃん
Excelの場合CellをVBAで扱うのは、VBAだけじゃ不十分で
VBAの基本とExcelの基本が十分出来上がって独立
共存できるようになってからじゃないと両方駄目になる悪寒
Accessの場合はVBAが出来てからテーブルやらクエリ
やら覚えていく方法がとれる。

515:デフォルトの名無しさん
09/10/28 17:06:49
別のスレでやれ

516:デフォルトの名無しさん
09/10/28 18:30:39
VBAを使用してアルバイトの出勤簿を作成しています。
例えば、セルJ6に名前をInputBoxを使って入力した時に、セルJ5にフリガナをカタカナで
自動で表示する場合はどのようにすればよいでしょうか?

517:デフォルトの名無しさん
09/10/28 20:57:08
フリガナにはそれ用のワークシート関数を使う

518:デフォルトの名無しさん
09/10/28 21:23:03
PHONETIC関数でしょうか?
フリガナを表示しないで、氏名(漢字)が表示されてしまいます。

519:デフォルトの名無しさん
09/10/28 21:39:35
大した人数でないなら
名前と読み方リスト作ろうぜ

520:デフォルトの名無しさん
09/10/28 21:44:07
読み方リストを作り、セル参照を使うということですか?

521:デフォルトの名無しさん
09/10/28 21:51:46
でもなんでも
どう料理するかは考えてないけど
テキストボックスに名前入れると読み仮名ラベルに表示するとかかな

522:デフォルトの名無しさん
09/10/28 21:58:13
>>510
宿題なのかな?答え書いたら勉強にならないから、ヒント書いておくね。

for i = 1 to 10 next

if i and 1 = true then 奇数
if i and 1 = false then 偶数

cells(4,1).value = cells(4,1).value + i

がんばって。

523:デフォルトの名無しさん
09/10/28 22:07:25
ワークシート関数を使うことに決めました。


524:デフォルトの名無しさん
09/10/28 22:08:51
Mod 演算子を使わないのは速度厨なせいでつか?

525:517
09/10/28 22:16:47
URLリンク(detail.chiebukuro.yahoo.co.jp)

なるほど、セルに直接入力しない場合で、phoneticを使用する場合は工夫が必要だね

526:デフォルトの名無しさん
09/10/28 22:40:03
ワークシート関数はVBAからでも呼び出せるっちゃ呼び出せる

527:デフォルトの名無しさん
09/10/28 22:49:49
変更して保存
  ↓
Excelを終了
とするにはどういうふうに構文をかけばよいでしょうか?

528:デフォルトの名無しさん
09/10/28 22:59:33
>>527
Application.Quit

529:デフォルトの名無しさん
09/10/28 23:49:49
そういえばかなり前に1からnまでの和をループを回して求めよってのに
For i = 1 To n
Next
和 = (1 + n) * n / 2
みたいなのがあったな。

530:デフォルトの名無しさん
09/10/28 23:53:53
>>522
ビット演算なんて分るやつあまりいないんだから、そういう知ったかぶりの回答はやめましょうね。

531:デフォルトの名無しさん
09/10/29 00:19:50
奇数 = 0
偶数 = 0
For i = 1 To 10 Step 2
  奇数 = 奇数 + i
  偶数 = 偶数 + (i + 1)
Next
Debug.Print 奇数, 偶数

532:デフォルトの名無しさん
09/10/29 00:26:27
>>530
>ビット演算なんて分るやつあまりいないんだから

え!そうなの?


533:デフォルトの名無しさん
09/10/29 00:48:08
>>510
教えてくれとは書いていなかったけど、よかったら参考にしてください。

Sub PlzDoHomeworkByYourself()

Range("D1").Value = 0
Range("E1").Value = 0

' The following was written by someone on the net.

For i = 1 To 10
If (i Mod 2) = 1 Then '2で割り切れない場合(奇数)
Range("E1").Value = Range("E1").Value + i
Else '2で割り切れる場合(偶数)
Range("D1").Value = Range("D1").Value + i
End If
Next

' If you're a teacher, you ought to punish your student who didn't do homework himself.

End Sub

534:デフォルトの名無しさん
09/10/29 01:18:45
>>533

ありがとうございます!!また頼むかもしれませんがよろしくお願いします。

535:デフォルトの名無しさん
09/10/29 01:45:25
Sub Main()
Dim rng As Excel.Range
Dim i As Integer
Set rng = Excel.ThisWorkbook.Sheets("Sheet1").Range("D1")
With rng
'初期化
.Offset(0, 0) = 0 '$D$1
.Offset(0, 1) = 0 '$E$1
For i = 1 To 10
Select Case True
Case (i Mod 2) <> 1 '偶数
.Offset(0, 0) = .Offset(0, 0).Value + i
Case (i Mod 2) = 1'奇数
.Offset(0, 1) = .Offset(0, 1).Value + i
End Select
Next i
'初期化
.Offset(0, 0) = 0 '$D$1
.Offset(0, 1) = 0 '$E$1
i = 1
Do While i < 11
Select Case True
Case (i Mod 2) <> 1 '偶数
.Offset(0, 0) = .Offset(0, 0).Value + i
Case (i Mod 2) = 1'奇数
.Offset(0, 1) = .Offset(0, 1).Value + i
End Select
i = i + 1
Loop
End With
End Sub


536:デフォルトの名無しさん
09/10/29 02:03:47
>>510

For i = 1 To 10
  Cells(1, 4 + (i And 1)) = Cells(1, 4 + (i And 1)) + i
Next

537:デフォルトの名無しさん
09/10/29 09:15:12
>>532
officeのVBAだと使わないしねぇ
vbaだと知ってても使う場面がほとんど無い品


538:デフォルトの名無しさん
09/10/29 09:24:31
>>529
なにそれ面白い


ビット演算とか知識はかろうじてあるけどナニソレ

539:デフォルトの名無しさん
09/10/29 12:14:21
俺ならこうやって高速化するぜ

For i = 1 To n Step n
Next
和 = (1 + n) * n / 2

540:デフォルトの名無しさん
09/10/29 12:21:10
すまんが教えてください

vbaでie制御して、ieのframes(a)内を全選択してコピーしたい。
frames(a)を全選択することが重要で、frames(b)の情報は必要ないし、innerText等での情報取得は避けたい。

ExecWBとSendKeysでやってみたが上手く行かなかった。
やり方に問題があるのか、違う方法があるのか?

教えてください。

541:デフォルトの名無しさん
09/10/29 12:21:25
おれならこうだな

for i = n to n
next

542:デフォルトの名無しさん
09/10/29 12:46:51
速さならこっちかな?

For i = 1 To n
Exit for
Next
和 = (1 + n) * n / 2

543:デフォルトの名無しさん
09/10/29 13:08:40
さすがにこれは反則だろうな

Goto aaa
For i = 1 To n
Next
:aaa
和 = (1 + n) * n / 2

544:デフォルトの名無しさん
09/10/29 13:21:48
和 = (1+n)*n/2
Debug.Print 和

ループ

こうか!

545:デフォルトの名無しさん
09/10/31 10:22:29
質問させてください。(Excel2003 XP)

ExcelでRS-232-C通信を行おうとしております。
大昔に一度、何かを見ながら自作したマクロを参考にやっています。
当時はMSCommを使用しておりましたので、同様にツールボックスから
MSCommをフォームに貼り付けると、
「サブジェクトは指定された操作に対して信頼されていません。」
と表示され、貼り付けることができません。

Webで調べると、どうやら
ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)
を実行したことで使用出来なくなってしまったようです。
対策はこれを削除とのことですが他へ配布したりPC乗り換えごとに
削除して回るのも非現実的です。

MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
更新プログラムの削除や新たに何かをインストールしなくても使用できる
方法はないでしょうか?
また他にWinAPIで行う方法もありましたがこちらで行う方法が主流?
なのでしょうか?

よろしくお願いします。

546:デフォルトの名無しさん
09/10/31 13:10:43

>ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)
>を実行したことで使用出来なくなってしまったようです。
>対策はこれを削除とのことですが他へ配布したりPC乗り換えごとに
>削除して回るのも非現実的です。

>MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
>更新プログラムの削除や新たに何かをインストールしなくても使用できる
>方法はないでしょうか?



自分で何言ってるか分かってる?

547:545
09/10/31 15:21:48
>546

失礼しました。

>MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
>更新プログラムの削除や新たに何かをインストールしなくても使用できる
>方法はないでしょうか?

MSCommのようなコントロールが分かりやすくて簡単ですのでこの様なコン
トロールを使用したいのですが更新プログラムの削除やフリーのアドインなど
をインストールしなくても使用できる方法はないでしょうか?
(MS系の更新インストールや代替コントロールのインストールは可)

WinAPIはサンプルを見てもまださっぱり理解できないので出来れば避け
たいのですが、今から作るのであればコントロールではなくWinAPIで行う
べきでしょうか?

よろしくお願いします。


548:デフォルトの名無しさん
09/10/31 19:18:22
MSCommを使いたいなら対策は「ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)」を削除


549:デフォルトの名無しさん
09/10/31 19:33:45
セキュリティパックとは、古く多少リスキーでありながらも
公開されていたDLLとかの機能を殺してしまってモノシリッ
ク化しつつある疑似カーネル群のコードを間接的に使うように
することだったんでつね

550:デフォルトの名無しさん
09/11/02 11:29:29
>>545
URLリンク(ziddy.japan.zdnet.com)
これはどう?

551:545
09/11/02 22:21:47
>550

ありがとうございます。
投稿前にこれも試したのですがVB6が入ってないから
ダメと言われました。

WinAPIに挑戦してみます。
ありがとうございました。

552:デフォルトの名無しさん
09/11/03 05:55:57
>>551
EasyCommというモジュールを使うと、素人の自分でも簡単に機能実現出来ました。

553:デフォルトの名無しさん
09/11/03 13:19:49
>>551
VB6のSP6のruntimeのみってvectorとかに無い?
#自分はsp5の使ってるけど

554:デフォルトの名無しさん
09/11/03 13:36:56
Vector のダウンロード数が一番になってるランタイムって、
コメント読んだらシステム破壊の事が書かれてて怖いわw

俺は昨日ソフト更新系のサイトでコレを発見したので入れてみた。

URLリンク(www.hmpage.jp)

セットアップがVB6のプロジェクトのタイプなので、インストール後に
アンインストールして、ライブラリ類は全残しでいけた。

555:デフォルトの名無しさん
09/11/03 14:58:37
Frameworkさえいれておけば.NETの機能って使えるんだな
最近知ったけどStringBuilderとか使えて便利だ

556:デフォルトの名無しさん
09/11/03 15:35:51
>>555
知らんかった・・・・・
#まともなhash使えるとかなりうれしいなぁ

557:デフォルトの名無しさん
09/11/04 21:19:25
AOD.NET って使える?

558:557
09/11/04 21:20:45
訂正
ADO.NET

559:デフォルトの名無しさん
09/11/04 22:32:00
VBAで使えるのはADOであってADO.NETは使えないんじゃなかった?
俺は2007だけどADOでアクセス(という言い方でいいか)してる。


560:デフォルトの名無しさん
09/11/04 23:40:03
CreateObjectでインスタンスを無理やり生成してやれば使えるんじゃね
まぁ、そこまでしてやるもんでもないと思うしVSTOでも検討した方がいい

561:デフォルトの名無しさん
09/11/07 09:08:12
以前お世話になりました270です。
ネット検索で検索ヒット件数を取得し
A1A2・・・にある単語の件数をB1B2・・・に記録したいのですが、
グーグルでは取得拒否にあってしまい、ヤフーで挑みたいのですが、
送信するのに文字を %5%7 とかにしないといけない(どういうキーワードに
つなげるかもわからない)みたいなのですが、
この送信ワード URLリンク(yahoo.co.jp) %5%6
とかの、?????と 文字の変換方法を教えていただける方いらっしゃいませんでしょう
か?

562:デフォルトの名無しさん
09/11/07 09:13:04
アタックはやめろ

563:デフォルトの名無しさん
09/11/07 09:39:23
yahooのデベロッパーのサイトでは一日5万まで使って開発してくれ
というのです。別段500でもいいから自動化させたいのですが・・・
そこには例文がなくて・・・どこかにフォーラムでもないでしょうか?

URLリンク(developer.yahoo.co.jp)

564:デフォルトの名無しさん
09/11/07 11:05:12
Yahoo! JAPAN Web APIはあきらかにスレ違い

565:デフォルトの名無しさん
09/11/07 17:28:03
excel vbaで他のブックのセルデータを参照するにはどうすればよいの?

566:デフォルトの名無しさん
09/11/07 17:30:07
上、ちなみにexcel2003です。
Workbooks(“ブック名.xls”).Worksheets(“シート名”).Activate
これをやっても、インデックスが有効範囲にありませんが出ます。
どなたかお願いします。
     

567:デフォルトの名無しさん
09/11/07 18:13:11
フォームのTextboxにドラック&ドロップで任意の列データを持ってくることはできますか?
やりたいことは、2つの異なるブックのフォームの列データーを他のブックの列データーと比較をしたいのです。



568:デフォルトの名無しさん
09/11/07 20:06:01
>565-567

つマクロの記録

569:デフォルトの名無しさん
09/11/08 00:28:16
B列に1万近くの数値があり、そこから特定の範囲(例えば100~101など)に適した数値を
指定したセルに抽出し、複数ある場合はそのしたに並べて抽出するようなプログラムを作りたいのですが、
どのようにしたらよいでしょうか?

Excel2003です

570:デフォルトの名無しさん
09/11/08 00:32:48
VBAでRSSの読み込みって出来ますか?

571:デフォルトの名無しさん
09/11/08 09:22:15
>>570
こんなとこで聞くよりgoogleで「VBA RSS」で検索すれば
よっぽど早く結果に到達できますよ。その上でわからないことを
質問したほうが効率的では?

572:デフォルトの名無しさん
09/11/08 09:57:39
>>569
import sys, os
import win32com.client

def main(from_s, from_e, to, rng):
if from_s[1] != from_e[1]:
print 'error'
return
if rng[0] > rng[1]:
print 'error'
return
pwd = os.path.abspath(os.curdir)
xls = win32com.client.Dispatch('Excel.Application')
try:
wb = xls.Workbooks.Open(os.path.join(pwd, 'test1.xls'))
sheet = wb.Sheets(1)
c = 0
for row in range(65535):
if row >= from_s[0] and row <= from_e[0]:
v = float(str(sheet.cells(row, from_s[1])))
if v >= rng[0] and v <= rng[1]:
sheet.cells(to[0] + c, to[1]).value = v
c += 1
wb.SaveAs(os.path.join(pwd, 'testout.xls'))
wb.Close()
except:
print sys.exc_info()
finally:
xls.Quit()

if __name__ == '__main__':
main((10, 2), (20, 2), (3, 5), (99.0, 1000.0)) # B10-B20 -> E3-

573:デフォルトの名無しさん
09/11/08 10:00:45
インデント消えてた orz
import sys, os
import win32com.client

def main(from_s, from_e, to, rng):
  if from_s[1] != from_e[1]:
    print 'error'
    return
  if rng[0] > rng[1]:
    print 'error'
    return
  pwd = os.path.abspath(os.curdir)
  xls = win32com.client.Dispatch('Excel.Application')
  try:
    wb = xls.Workbooks.Open(os.path.join(pwd, 'test1.xls'))
    sheet = wb.Sheets(1)
    c = 0
    for row in range(65535):
      if row >= from_s[0] and row <= from_e[0]:
        v = float(str(sheet.cells(row, from_s[1])))
        if v >= rng[0] and v <= rng[1]:
          sheet.cells(to[0] + c, to[1]).value = v
          c += 1
    wb.SaveAs(os.path.join(pwd, 'testout.xls'))
    wb.Close()
  except:
    print sys.exc_info()
  finally:
    xls.Quit()

if __name__ == '__main__':
  main((10, 2), (20, 2), (3, 5), (99.0, 1000.0)) # B10-B20 -> E3-

574:デフォルトの名無しさん
09/11/08 10:44:08
2003 初心者です。
ワークシートイベントで処理を抜け出すのはどうすれば・・
一度だけ計算させたいんですが。どこかで見た気がするのに探せない。


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Column = 1 Then
Target.Value = Target.Value + 1
'この後どうすれば・・・・
End If
End Sub

575:デフォルトの名無しさん
09/11/08 11:14:38
>574

どっかのセルに実行済みをセットすれば?

576:デフォルトの名無しさん
09/11/08 12:57:57
>>574
Application.EnableEventsを使うが、実用になるChangeイベントを書くのはかなり難しいよ。
あきらめた方がいいと思うな。
真っ先に考えられる不具合は消した場合でも1になったりすることだな。
問題はこれだけじゃないからかなり難解。

577:デフォルトの名無しさん
09/11/08 13:35:30
>>575-576
どもです。そもそも無茶なことか・・・
初心者ゆえに「出来る・出来ない」が良くわからない

ありがとでした

578:デフォルトの名無しさん
09/11/08 14:05:32
staticでも使え

579:デフォルトの名無しさん
09/11/08 17:28:43
シート起動時に、フォームを出してそれを10秒後で消す。
その10秒の間に、フォーム内のTextboxの値を
ユーザーの任意で変更できるようにと考えましたが、
タイマーしてる間、フォームが白く固まって値変更ができません。
何か改善策はありますでしょうか。2003です。

Private Sub UserForm_Activate()
Dim MyWaitTime As Date
'10秒後に閉じる場合
MyWaitTime = TimeSerial(Hour(Now()), Minute(Now()), _
Second(Now()) + 10)
Application.Wait MyWaitTime 'マクロを指定の時間まで停止
Unload.対象日数の入力フォーム 'UserFormを閉じる
End Sub

580:デフォルトの名無しさん
09/11/08 17:44:47
イベントループ拾わんといかんだろ

581:デフォルトの名無しさん
09/11/08 17:45:47
C言語側で扱うためのバイナリファイルをVBAで出力していて
整数値は除算や剰余算を用いてバイト型配列に代入して出力しているのですが、
浮動小数値(単精度)をバイト型配列に含める場合にどう処理すればいいのか分からず困っています。
良い解決策をご教授頂ければ助かります。


582:デフォルトの名無しさん
09/11/08 18:10:19
URLリンク(program.station.ez-net.jp)
URLリンク(www.hi-ho.ne.jp)
URLリンク(piza.2ch.net)
URLリンク(support.microsoft.com)

583:デフォルトの名無しさん
09/11/08 22:34:13
>>581
配列に入れる理由がファィル出力のためだけなら、いちいち配列など使わずに
ファイルをBynaryモードで開いて整数も実数もそのまま出力してしまえばいい。
ただし、実数の内部表現が異なる場合は使えない。

どうしてもVBAの中で1バイトずつ取り出す必要があるなら、
Win32APIのMoveMemoryを使うぐらいしか方法がない。

584:デフォルトの名無しさん
09/11/09 20:42:51
#ファイル番号 でファイルにバイナリアクセスしている時に、
ストリーム位置を取得する方法を教えてください。
(Cのftell()相当の操作)

585:584
09/11/09 21:06:44
自己解決しました。
Seek( ファイル番号 ) で取得できました。

586:デフォルトの名無しさん
09/11/10 15:17:54
Private Sub UserForm_Initialize()

Dim lastRow As Long
Dim ReturnBook As Workbook, TargetBook As Workbook
Set ReturnBook = ActiveWorkbook
Application.ScreenUpdating = False
Set TargetBook = Workbooks.Open("D:\test\sample.xls")

With TargetBook.Sheets("Sheet1")
' ListBox1.ColumnHeads = True
Me.ListBox1.List = .Range(.Range("B2"), .Cells(.Rows.Count, 2).End(xlUp)).Resize(, 2).Value

ReturnBook.Activate
Application.ScreenUpdating = True
TargetBook.Close
End With
End Sub

削除区分  コード 商品名
0    1001 りんご
1  1002 みかん
0    1003 バナナ

こういう風な外部ブックに対して削除区分が1のデータをリストボックスに
表示しないようにするにはどうすればいいですか?教えてください


587:デフォルトの名無しさん
09/11/10 23:44:43
URLリンク(b.hatena.ne.jp)
会社の仕事でマクロを組むのはズル? 事務作業の効率化に意見さまざま


588:デフォルトの名無しさん
09/11/10 23:48:02
マクロを組むのはズルじゃないが
他人が作ったマクロを勝手に使って
仕事を早く終わらせるのはズルだと思う
少しはリスペクトなりインセンティブなり気を使えと

589:デフォルトの名無しさん
09/11/11 15:13:14
その理屈でいくとPCも電卓もせめて一度は作ってから使えということになるが

590:デフォルトの名無しさん
09/11/11 15:25:27
その理屈でいくと家も会社もせめて一度は作ってから住め(従事)ということになるが

591:デフォルトの名無しさん
09/11/11 22:10:44
シート2の表を、シフト+編集で図のコピーを行い、シート1に貼るマクロを組みましたが、
そのシート1の貼りつけた図のコピーを切り取るマクロを組むと、ピクチャー番号が異なるために、できません。どうすれば、解決できますか?

592:デフォルトの名無しさん
09/11/11 22:21:57
以下のような動作をするマクロって、VBAで作成できますか?
(実現可能性だけ教えて頂ければ、自力でどうにかしたいと思います)

・処理内容
 Outlook2007で、
 特定の件名がついたメールは、メール内容表示の際にボタンを出現させて、
 ボタンを押すことでExcel2007にメールの内容を転記させる。
 例えば、以下のような感じです。

 ■Outlook
  件名:○○見積書
  メール内容:
  ○○費 \50000
  △△費 \100000
   ――-
  |ボタン|←ポチっとな
   ――-
 
 ■Excel
  A1セル:○○費
  A2セル:\50000
  B1セル:△△費
  B2セル:\100000
  が転記される
 
 


593:デフォルトの名無しさん
09/11/12 00:23:58
できるっちゃできる

594:デフォルトの名無しさん
09/11/12 00:28:37
シート上に下記のパラメータで長方形のオートシェイプを作りたくて書いたVBAです

Sub 四角形2()

Dim MyShape As Shape
Set MyShape = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 40, 425, 355, 90)

With ActiveSheet.Shapes.Range(MyShape.Name)
.Fill.Visible = msoTrue
.Fill.Solid
.Fill.ForeColor.SchemeColor = 10
.Fill.Transparency = 0.5
End With

End Sub


しかし実際にはWith内で指定したパラメータは常に共通で
位置と大きさのみ違う複数のケースでの長方形を作りたいのです。

With~End WihtをPrivateFunctionに書いて、MyShapeの値を変えて参照させれば良いですか?

あと自分で書いておいてなんですが(MyShape.Name)は何を表すんでしょう?

595:デフォルトの名無しさん
09/11/12 19:57:22
質問です。
あるフォルダに入っているテキスト形式のデータ10個を
エクセルで開いていくVBAのプログロムを書いている
のですが、エラー文で「データ_i.txtがありません」と表示されます。
私の書いたプログラムは下記です。

Sub テスト()
テスト Macro
Dim i As Integer

For i = 0 To 5
ChDir "C:\Documents and Settings\データ"


Workbooks.OpenText Filename:= _
"C:\Documents and Settings\データ\_i.txt" _
, Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
Next i
End Sub

このプログラムの目的は、テキストデータの入っているフォルダを
他の名前に変更したときも、その中に入っているテキストデータ10個を
エクセルで展開するためです。おそらく
"C:\Documents and Settings\データ\_i.txt"のiの部分が間違えていると
思うのですが、どうすればいいでしょうか?よろしくお願いします。

596:デフォルトの名無しさん
09/11/12 20:10:08
知らんがな(´・ω・`)

597:デフォルトの名無しさん
09/11/12 20:32:33
"C:\Documents and Settings\データ\_" & i & ".txt"
としてやらんといかんのとちゃうかな

598:デフォルトの名無しさん
09/11/12 20:34:03
>595

データさんか?
普通はそこにアカウント名が入るんだが。

まさかとは思うがi.txtのiって・・・w

599:デフォルトの名無しさん
09/11/12 21:00:42
>>このプログラムの目的は、テキストデータの入っているフォルダを
>>他の名前に変更したときも、その中に入っているテキストデータ10個を
>>エクセルで展開するためです。

(・ω・`)???

600:595
09/11/12 21:12:37
みなさんアドバイス感謝です!

説明不足ですみません。

質問ではテキストデータと書きましたが、.datで保存されています。

フォルダの中に「_0.dat」「_1.dat」「_2.dat」…というデータが10個あります。

ほんとは10個開きたいのですが、とりあえず5個開けたら5を10に直せばいいかなと

思ってます。

>>597さん

\データ\_"&i&".dat"としましたが、コンパイルエラーになります。

dat形式のデータは無理なのでしょうか?


601:デフォルトの名無しさん
09/11/12 21:18:41
"C:\Documents and Settings\データ\_" & i & ".txt" _

死ね >>600

602:デフォルトの名無しさん
09/11/12 23:40:30
597見てダメなら何聞いてもダメだろ
スペルミスとかスペース抜けとかで質問されても困る

603:デフォルトの名無しさん
09/11/12 23:56:23
Range("G1").Select の
1をfor文使って
1~100までするにはどうすればいいでしょうか?

For n = 1 To 100
Range("D&n&").Select
だとエラーになります

604:デフォルトの名無しさん
09/11/12 23:59:00

Range("G1").Select ×
Range("D1").Select ○

605:デフォルトの名無しさん
09/11/13 00:00:00
Range("D" & n).Select

あるいは

Cells(n, 4).Select

606:デフォルトの名無しさん
09/11/13 00:06:08
>>595>>603は同じヤツか?

根本的に・・・

607:デフォルトの名無しさん
09/11/13 00:09:35
ActiveCell.FormulaR1C1 = "=-(R[+&n]C[-2]-R[-4]C[-2])"

R[+&n]を引数にする場合はどうでしょうか?

608:デフォルトの名無しさん
09/11/13 00:49:12
もはやネタだろ

609:デフォルトの名無しさん
09/11/13 00:53:26
ネタじゃないです><
ActiveCell.FormulaR1C1 = "=-R["&n&"]C[-2]-R[-4]C[-2]"
とかやってみたんですがダメでした

610:デフォルトの名無しさん
09/11/13 01:02:20
寝たとしてもまったく面白くない
もっと回答したくなるように質問しろ

611:デフォルトの名無しさん
09/11/13 01:03:42
>>594

AddShapeの引数を変数にして全体をループさせるだけでいいのでは?
共通パラメータをわざわざ関数にする必要はないと思う。

>あと自分で書いておいてなんですが(MyShape.Name)は何を表すんでしょう?
ShapesのRangeプロパティは、指定したShapeのオブジェクトを返す。
この"指定した"というのが今回の場合はMyShape.Nameとなる。

正直わかりにくいし、Rangeなんて使った事無い。
With ActiveSheet.Shapes(MyShape.Name)
もしくは
With MyShape
このどちらかが一般的だと思ってるがどうだろうか。

>>607
>>595>>603に続いて同じ失敗をしている。
>>597を参考にして考えればわかる。

612:デフォルトの名無しさん
09/11/13 10:51:53
変数使ってセル座標の指定するなら、cells使った方が楽だと思ってる。

613:デフォルトの名無しさん
09/11/13 10:57:30
その方が速い

614:デフォルトの名無しさん
09/11/13 14:43:25
すまんが教えてください

vbaでie制御して、ieのframes(a)内を全選択してコピーしたい。
frames(a)を全選択することが重要で、frames(b)の情報は必要ないし、innerText等での情報取得は避けたい。

ExecWBでやってみたけど上手く行かなかった。
SendKeysもいまいちだったし、出来るならやりたくない(違う作業が出来なくなるため)
やり方に問題があるのか、違う方法があるのか?

教えてください。

615:デフォルトの名無しさん
09/11/13 18:44:29
・自分に何かしら不幸な出来事が起きたとき、落ち込んでしまうのは仕方のない話。ショックが大きいほど、
 人前に姿をさらすのも苦痛になるものだが、そういうときの行動こそ、人間の大きさが見えるものかもしれない。

 米シカゴに住む34歳のティアン・ハリスさんは、 10月31日に幸せな花嫁となる予定が、6日前になって相手の
 男性から突然結婚の中止を告げられてしまった。式直前でのまさかの事態だが、さらなる追い打ちを
 かけられてしまう。慌てて母親と一緒にパーティー会場にキャンセルを申し出ると、もう返金は不可能と
 言われたそう。駐車場に座り込み落ち込むハリスさんと、なす術もなく見守る母親。そのとき、向かいに
 あった老人ホームを目にして良いことを思いついた。

 どうせ無駄にするならと、2人は向かいの老人ホームの人たちとパーティーを開こうと決断する。
 「寄付をしたい」とハリスさんが飛び込んだ老人ホームの施設長は、「彼女はここにいる誰も知らないだろうし、
 そんなオファーも受けたことない」(米紙ニューヨーク・デイリーニュースより)と驚いた。かくして、ハリスさんの結婚パーティーは、
 老人ホームのハロウィンパーティーへと変更。お年寄りたちも、思いもよらぬイベントを大いに喜んだという。

 300人近いお年寄りは思い思いに仮装して、ダンスに興じた。あるお年寄りは「とても楽しい時間だった」
 (米放送局CBSより)と語り、老人ホームに素敵なひとときをもたらしたハリスさんに感謝している。施設長も
 「彼女はどこからともなくやってきて、私たちに美しいパーティーを与えてくれた天使」とハリスさんを讃えた。

 会場の傍らでお年寄りの笑顔を見て満足したというハリスさんだが、本当なら自分が主役になるはず
 だったパーティーにやはり心境は複雑だったよう。母親も「会場で、皆さんの前にいるのが娘だったら
 よかった」と無念さを語り、施設長も「彼女は落ち込んでいたと思う」とハリスさんの心中を慮った。
 しかし、そうした中でもお年寄りたちに幸せな時間を与えたハリスさんの人柄に、施設長は「神は彼女を祝福し、
 きっとほかに良い人を見つけられる」と太鼓判を押す。

 ハリスさんは11月2日に、新婚旅行となるはずだったハワイへ1人で旅立ったそう。花嫁になり損ねてしまった
 ハリスさんだが、彼女が取った決断が多くの人に幸せを与えただけでなく、少なからず自分への励みに
 なったことを願いたい。(抜粋)
 URLリンク(www.narinari.com)

616:デフォルトの名無しさん
09/11/13 18:49:15
なげーよ 2行でギブw

617:デフォルトの名無しさん
09/11/13 19:33:04
質問です。
10ページある文書のうち、例えば2、5、7ページだけを印刷したい場合、


Sub 印刷()
Worksheets("文書").PrintOut from:=2, to:=2
Worksheets("文書").PrintOut from:=5, to:=5
Worksheets("文書").PrintOut from:=7, to:=7
End Sub


と、やるのでしょうか?
なにかもっと良い方法がありそうな・・・
OSはVISTA、バージョンは2007です。

618:デフォルトの名無しさん
09/11/13 21:27:48
Sub 印刷()
Worksheets("文書").PrintOut pages:=2,5,7
End Sub


619:あ
09/11/13 22:01:06
質問させて頂きます。
A1からA100に1から10の数字を入力するマクロを作成
していますが、無限ループになってしまいます。。

どのようにすればよろしいでしょうか?

Sub Ary()
Dim Arow As Long
Dim i As Long

For i = 1 To 600
Cells(i, 1).Value = i
If i = 10 Then
i = 1
End If
Next i

End Sub

620:デフォルトの名無しさん
09/11/13 22:26:21
>>619
個人的には
>For i = 1 To 600
に突っ込みたいが、まじめに答えるとi=10の時にi=1にしろって指示してるので
i=1 → 10 → 1 → 10 → の無限ループになってる
1,2,・・・10,1,2,・・・ と繰り返したいなら cells(i,1)=i%10 みたいに余りを計算すれば良い
(余りの計算は %じゃなくてmodとかかも知れない。忘れた)

621:デフォルトの名無しさん
09/11/13 22:27:52
ごめん
10で割って余りだと0,1,2,・・・,9,0,1,・・・ってなるから1足せ


622:デフォルトの名無しさん
09/11/13 22:57:12
>>619
カウンタ変数(i)をForループの中で書き換えるのは可能な限り避けた方がイイ
何回回ったかわかんなくなっちゃうよ

623:デフォルトの名無しさん
09/11/14 00:02:36
【科学】道路に軍手が落ちているワケ、名城大研究チームが突き止める[09/11/05]

スレリンク(hidari板)




624:デフォルトの名無しさん
09/11/14 00:51:45
>>620
Dim Arow As Longに突っ込めよ

625:デフォルトの名無しさん
09/11/14 04:51:06
e = "& mi &" + 5 * "& c &" - 5

mi、c は変数です。
何がいけないのでしょうか?

626:デフォルトの名無しさん
09/11/14 05:13:52
お前は2chに書き込んではいけない

627:デフォルトの名無しさん
09/11/14 07:43:48
e = mi + 5 * c - 5
じゃダメなの?

変数が文字列の中に含まれちゃってるよ。
ただのmiって文字列としか認識されない。


628:デフォルトの名無しさん
09/11/14 08:59:38
>>619
Sub Ary()
Dim Arow As Long
Dim i As Long
Dim j As Integer

j = 1
For i = 1 To 600
Cells(i, 1).Value = j
j = j + 1
If j > 10 Then
j = 1
End If
Next i

End Sub
こんなものでどないでしょう。

629:デフォルトの名無しさん
09/11/14 09:49:32
Arow ってなんだ

630:デフォルトの名無しさん
09/11/14 10:04:03
正解(>>620-621)が出た後にボケ回答(>>622 >>628)が出てくる、の法則

631:デフォルトの名無しさん
09/11/14 10:12:07
自分よりいい答えが出たのがそんなに悔しかったのか

632:デフォルトの名無しさん
09/11/14 10:15:19
(;゚д゚)ァ

633:デフォルトの名無しさん
09/11/14 10:49:33
>>619
Sub Ary()
Dim Arow As Long
Dim r As Range

For Each r In Range("A1:A100")
r.Value = r.Row Mod 10
Next r

End Sub
こんなものでどないでしょう。

634:デフォルトの名無しさん
09/11/14 10:50:58
ごめん
10で割って余りだと0,1,2,・・・,9,0,1,・・・ってなるから1足せ


635:デフォルトの名無しさん
09/11/14 11:01:07
.Formular1c1="=Average(R["& c &"]C["& d &"]:R["& c+2 &"]C["& d+2 &"])"

のようにRCの中に変数を入れたい場合はどうすればいいのでしょうか?

アドバイスお願いします

636:デフォルトの名無しさん
09/11/14 11:07:03
馬鹿発見

637:デフォルトの名無しさん
09/11/15 01:17:24
四択問題を作っています。

Public Seikai As Integer, i As Integer, Ruiseki As Integer
Sub Quiz()
Dim Det As String
i = 1
Ruiseki = 0

Do

Det = Sheets("Sheet3").Cells(i, 1)
If Det = "" Then Exit Do
UserForm1.Show
i = i + 1

Loop While Det <> ""

UserForm2.Show
'MsgBox "正解は" & Ruiseki & "問です。"

End Sub

sheet3のA列に問題番号、B列に問題、C列に正解番号を入れています。
問題は50問作ったのですが、この中から20問をランダムに表示する
ようにしたいのですが、どのようにしたらいいかわかりません。
今は、50問全て順番に表示されてしまう状態です。
教えてください。
よろしくお願いします。

638:デフォルトの名無しさん
09/11/15 01:45:55
RAND()で適当な番号をふって並び替えて上から20問をつかう

639:デフォルトの名無しさん
09/11/15 13:25:55
>>618
ありがとうございます!
助かりました。

640:637です
09/11/16 00:26:37
>>638
マクロを具体的にどう変更したらいいかおしえてください…

641:デフォルトの名無しさん
09/11/16 08:16:40
>>640
例えば、D列に乱数で適当な数字を振る
D列を見て数の大きい順に20問を出題する

そこまで自分で作ったのなら、これくらいできるだろ?
宿題なら自分でどうぞ

642:デフォルトの名無しさん
09/11/16 11:18:19
マクロが
A
B
C
D
こうあったとして、全てのマクロを実行するマクロを作るにはどうやったらいいですか?

643:デフォルトの名無しさん
09/11/16 11:26:37
全てのマクロを呼び出すマクロを作ればいいだけだろ

644:デフォルトの名無しさん
09/11/16 16:52:03
Sub all_execute()
A
B
C
D
End SUb



wwww


645:デフォルトの名無しさん
09/11/16 20:20:05
私は基本C/C++のPGです。業務でVBAの面倒を見ることになりそうなんですが、
言語仕様がコンパクトにまとまってるような本はないでしょうか?

VBAの仕様なんてたかが知れてるかもしれませんが、分厚い本やWEBサイトをいったりきたりするのは面倒だし
言語に自分の知らない部分があるというのが気持ち悪い性分なので、まとまってる本を探しています(WEBでもいいのですが)

・プログラミングの知識前提で、
・ペラッペラの単色刷りで
・言語使用だけは満足してる
オライリーのクイックリファレンスのVBA版みたいなのが理想です(探したけどなかった)。

VBAの解説本だとプログラミング未経験者向けの、カラフルで妙に分厚い本が多いような気がするのですが
私としてはクイックリファレンス的な本が理想なので…
お勧めの本などあれば教えてください。

646:デフォルトの名無しさん
09/11/16 22:17:54
VBA辞典

647:デフォルトの名無しさん
09/11/16 22:23:14
>>645
マジレスだけどリファレンスとしてはオンラインヘルプ一択
結局ヘルプ以上にならないから初心者向けの分厚いカラー刷りになる
紙がよければ死ぬ気で全部印刷


648:637です
09/11/17 00:26:19
>>641
RAND()で、
B列とC列のくみあわせは変わってしまうことは無いのですか?

649:デフォルトの名無しさん
09/11/17 00:28:24
>>648

ここはマ板ですよ?

650:637です
09/11/17 00:38:30
>>649
死ねクズ

651:デフォルトの名無しさん
09/11/17 00:39:17
>>648
おまえの前にある箱の向こうにも人がいるんだぜ
>>638>>641 も的確な回答してるじゃん
それに対して、あーじゃない、こーじゃない、って・・・
更に質問するんだったら

ありがとう御座います。ヒントを基に組んでみたら、こんな動作をしました。
ここが怪しいと思うので、調べたり試行錯誤したのですが、こんなエラーが出てしまいます。
何かアドバイス頂けないでしょうか?

くらい書いたほうがいんでね?

なんとなくムカつく文章だったので勢いで書いた

652:デフォルトの名無しさん
09/11/17 00:56:42
的確?

653:デフォルトの名無しさん
09/11/17 01:01:43
>>652
的確だと思うぞ。

654:デフォルトの名無しさん
09/11/17 08:15:19
>>653

俺も的確だと思うけどな。
質問する側のレベルが低いんだろw


655:デフォルトの名無しさん
09/11/17 08:40:16
おまいらココ逝って正しいRANDの使い方教えてきやがれ
URLリンク(www.nicovideo.jp)

656:デフォルトの名無しさん
09/11/17 09:03:50
【社会】スーパーコンピュータ向け「Excel」開発中 - Microsoft
スレリンク(newsplus板)

657:デフォルトの名無しさん
09/11/17 11:57:24
A2~A20000ぐらいまで誕生日(シリアル値)が入っています
B列に年齢を出したいときは、どういう計算をすれば軽くなるでしょうか?
古いPC(win95)なのでものすごく時間がかかっています
他のマクロでも応用したいので、教えてください
お願いします!

658:デフォルトの名無しさん
09/11/17 17:49:46
関数にdatedifってのが有るから

=DATEDIF(A2,TODAY(),"y")

で済むと思うけど、どうしてもVBA上から使いたいならworksheetfunctionを付ければ?



659:デフォルトの名無しさん
09/11/17 19:25:58
ワークシートに関数を沢山入れると重くなる、という意味に解釈して
VBAにて
Range("B2").Value = DateDiff("yyyy", Range("A2").Value, Now)
を必要行だけ繰り返す

660:デフォルトの名無しさん
09/11/17 19:54:25
>>643-644
単純に考えればいいってことがわかった気がする
どうも

661:デフォルトの名無しさん
09/11/17 22:22:18
>>660
他のファイルとかに書いてあるのを呼ぶときはスコープが問題になることがあるから気をつけてね
Public宣言付けたり、参照設定したりとか

662:デフォルトの名無しさん
09/11/18 09:58:30
ハイパーリンクに関する質問です。
例えばセルA1に何か文字列が入っている状態で
セルA2に以下のシート関数が入っているとします。
=IF(A1="","",HYPERLINK("URLリンク(www.yahoo.co.jp)","Yahoo"))
そうすると、セルA2には"Yahoo"の文字列が表示され
"URLリンク(www.yahoo.co.jp)"へのリンクが張られている状態です。

ここで、VBAにより、リンク先である"URLリンク(www.yahoo.co.jp)"の文字列を
取得する方法はあるのでしょうか?
セルA2に設定されている関数の文字列を解析するという手もあるとは思いますが、
それ以外で方法はあるのでしょうか?


663:デフォルトの名無しさん
09/11/18 14:09:25
あるんじゃない

664:デフォルトの名無しさん
09/11/18 14:14:34
>>658-659
とてつもなく軽くなりました、ありがとうございました!


665:デフォルトの名無しさん
09/11/18 16:45:42
>>664
>>658の数式でも軽くなったの?
もし重かったら揮発性関数のTODAY()のせいだな。
どこかのセル、たとえばF1にCtrl + ;で今日の日付を求めて
=DATEDIF(A2,$F$1,"Y")とすれば数式でも軽くなるかもよ。

666:デフォルトの名無しさん
09/11/18 22:41:02
1日か31日までの1ヶ月分のシートがあるとします
それぞれのA1セルに日付をいれてます
この1ヶ月分のシートの月曜日と火曜日だけを対象してなんらかの処理を行いたいときはどのような方法を取ればいいでしょう?
よろしくお願いします

667:デフォルトの名無しさん
09/11/18 23:30:02
1日か31日までってことは
1日の場合は前月の2日から一か月分って言う意味?

668:デフォルトの名無しさん
09/11/18 23:32:15
>>666
for each collectionでシートに対してループ回して
その中でA1セルを調べて、曜日をチェック
で、なんらかの処理を行えばOK

669:666
09/11/18 23:36:40
失礼しました
1日から31日までの31シートです

>>66
ぐぐってみます8

670:デフォルトの名無しさん
09/11/19 09:19:43
ワード・アクセスのVBAスレってありませんか?

671:デフォルトの名無しさん
09/11/19 09:24:37
スレリンク(tech板)
スレリンク(tech板)
スレリンク(tech板)
スレリンク(tech板)

672:デフォルトの名無しさん
09/11/19 11:42:02
ありがとうございます
検索しにくいっす・・

673:デフォルトの名無しさん
09/11/19 19:46:28
WordのVBAはどういうときに使うんだ?

674:デフォルトの名無しさん
09/11/19 20:13:37
時節柄考えられるのは
年賀状宛名流し込み印刷かな

675:デフォルトの名無しさん
09/11/19 20:27:20
それVBAいらないやん

676:デフォルトの名無しさん
09/11/19 21:46:41
差し込み印刷なんかExcel VBAでも同等のことするの簡単だよな。

677:デフォルトの名無しさん
09/11/19 21:49:26
A1セルに1月1日(月)のように入力しています
ここから特定の曜日(火曜日と日曜日など)を区別して処理をおこないたいのですが
どのような方法を取ればよいのかご教授ねがいます

678:デフォルトの名無しさん
09/11/19 22:10:09
>>677
おまえ666だろ
曜日を調べる関数を使う
関数名は自分で調べろ
以上

679:デフォルトの名無しさん
09/11/19 22:43:03
そもそも1月1日(月)って入力するのが間違いだ罠。
1/1と入力して表示形式をm月d日(aaa)にするだけだ。

680:デフォルトの名無しさん
09/11/20 05:56:15
質問
教えてえろい人
エクセルのVBAを使って、Outlookメールを複数の人に自動送信操作をさせたいです。
Aさん(○○○@○○.co.jp)にエクセルSheet1に記載された内容を送信し、
Bさん(XXX@XX.ac.jp)にエクセルSheet2に記載された内容を送信します。
後、CさんにエクセルSheet3を・・・という具合に・・・
以上の事が、エクセルVBAを使って1回だけマクロを走らせるだけで、できるでしょうか?



681:デフォルトの名無しさん
09/11/20 07:34:40
ユーザーフォームのlistviewについて質問です
listviewで縦横のスクロールバーのやり方が分からないのですが
どうすればうまくいくでしょうか?

682:デフォルトの名無しさん
09/11/20 11:22:46
>>680
できるでしょうね

683:デフォルトの名無しさん
09/11/20 11:48:16
てst

684:デフォルトの名無しさん
09/11/20 21:52:10
>>680
ExcelのよりOutlookのVBA使ったらどうよ?

685:デフォルトの名無しさん
09/11/20 22:27:51
同一セル内の数字を下のように並べかえたいのですがどうすればいいですか?
「333      「111
 111   ⇒   333
 555」      555」

3桁ずつ切り分けて別セルに出力、ソートをかけて並べかえるというものは
出来たのですが、出来ればマクロの中だけで処理をしたいんです。

686:デフォルトの名無しさん
09/11/20 23:13:54
>>685
安直だけど、例えばセルA1を対象とするならこんな感じ

Sub Macro1()
a = Split(Range("A1").Value, Chr(10))
For i = 0 To UBound(a) - 1
For j = i + 1 To UBound(a)
If a(i) > a(j) Then
tmp = a(i)
a(i) = a(j)
a(j) = tmp
End If
Next j
Next i
Range("A1").Value = Join(a, Chr(10))
End Sub


687:デフォルトの名無しさん
09/11/20 23:17:11
こんにちわ。
質問をさせてください。

正規表現でのマッチパターンを用いて、
文字列をSplitして配列に入れたいと考えています。
以前javaで行った時は問題無く出来たのですが、
VBAの場合には上手くパターンを認識してもらえません。
下のコードで行ったのですが、”スペース”or","の1回以上の繰り返しでSplitを目的としています。

Sub testVBA()
Dim Reg As Object
Dim regPattern As String
Dim reMatch As Object
Dim i As Integer
Dim STR As Variant

Set Reg = CreateObject("VBScript.RegExp")
Reg.Pattern = "[ ,]+"
STR = Split("moug MOUG,モーグ,,もーぐ", regPattern)
For i = 0 To UBound(STR)
Debug.Print (STR(i))
Next
End Sub

続きます。

688:デフォルトの名無しさん
09/11/20 23:17:20
javaのコードは下で行いました。

import java.util.regex.*;
public class testJava {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("[ ,]+");
String[] strs = pattern.split("moug MOUG,モーグ,,もーぐ");
for (int i=0;i<strs.length;i++) {
System.out.println(strs[i]);
}
}
}

VBAで出来るのであればやり方を教えてくださいませ。
VBAでは対応していないと言う事でも構いません。
何卒よろしくお願いします。

689:デフォルトの名無しさん
09/11/20 23:18:42
すいません・・・。
モーグで質問しようとして準備していた文書を張ってしまいました。
ちなみにマルチポストではありませんので、よろしくお願いします。

690:デフォルトの名無しさん
09/11/21 00:40:26
>>687
VBAのSplitが正規表現を受付けないんじゃないの

s = "123 456 789"
ArySize = 0
Dim Ary()
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "[ ,]+"
Do
ArySize = ArySize + 1
ReDim Preserve Ary(ArySize)
Set Matches = re.Execute(s)
If Matches.Count <> 0 Then
v = Left(s, Matches(0).FirstIndex)
s = Right(s, Len(s) - (Matches(0).FirstIndex + Matches(0).Length))
Else
v = s
End If
Ary(ArySize - 1) = v
MsgBox v
Loop While Matches.Count <> 0
MsgBox Join(Ary, "$")

691:687
09/11/21 08:37:43
>>690
レスありがとうございました。
やはりVBSのオブジェクトですし、VBAのsplitが対応してないのは頷けます。
ソース例の提示、ありがとうございました。
自作関数で対応しようと思います。

重ね重ねありがとうございました。

692:デフォルトの名無しさん
09/11/21 10:02:39
excel2007

ブックに変更が有った時に保存するようにしたいのですが、変更が有ったか無かったかのチェックって
どうするのでしょうか?

保存するのはThiworkbookの閉じる時で

Private Sub Workbook_BeforeClose(Cancel As Boolean)


End Sub

の中に入れれば良いのでしょうけれど。


693:デフォルトの名無しさん
09/11/21 11:15:06
>>692
If WorkBook.Saved = False Then
  '保存処理
End If

694:デフォルトの名無しさん
09/11/21 11:21:38
>>693
thxです!

695:デフォルトの名無しさん
09/11/21 12:50:52
WinVista-Excel2007

VBAでなくActiveXの問題かもしれませんが
VBAの編集中に起きた問題なのでコチラで。

先にActiveXのボタンを配置しVBAで記述したSub{}を実行するという簡単なものを複数作成していたのですが
5・6個作り終えいざ実行してみようとボタンを配置してあるワークシートを開こうとしたところ
ボタンは表示されずエラー(特定のエラー名表示されず)が起きExcelが強制終了してしまいます。

また新規作成でActiveXのボタンを新たに配置しようとしても同じ現象が起こりました。
アドインも複数導入している状態のためもしかするとVBAの可能性も捨てきれないのではと質問させて頂きました。

対処法・解決策はございますでしょうか?
宜しくお願いいたします。

696:デフォルトの名無しさん
09/11/21 13:18:23
>>695
俺は何に原因がわかるかは知らないし、
ActiveXに関係ない話だが俺の話を聞いてくれ

Excel VBAでプログラム作ったんだよ。
クラスとかwitheventsとか使ってね。

そしたらなぜかExcelが強制終了するんだよw
いや、しないときもある。するときもある。
自分のマシンでは強制終了するのに、他のマシンでは動くとか
新しくExcel作ってソース全部移植したら直るんだよ。
でもしばらくするとまた強制終了するようになるんさよ。

原因さっぱりわかんねw
俺は思ったね。Excelで無理しちゃいけねぇ。
単純なマクロ程度で終わらせておくべきだって。

697:デフォルトの名無しさん
09/11/21 13:42:52
>>695
起動時に強制終了するアドインでも作ったんじゃね?


698:デフォルトの名無しさん
09/11/21 14:51:42
>696
わかる

699:685
09/11/21 15:14:26
>>686
出来ました。
ありがとうございました。

700:デフォルトの名無しさん
09/11/21 16:15:33
パチンコ店 ATM8000台 IIJ社 今後4、5年で全国に
URLリンク(www.jcp.or.jp)
2chとパチンコ屋が無くなれば日本の景気は上向くかもな

701:デフォルトの名無しさん
09/11/21 18:55:37
>>695 >>696
俺も似たような現象で悩んでいる。
アドイン複数入れて、VBAでプログラム作って2~3回動かすのには問題ないんだが
しばらく使ってExcelを終了させると、
「問題が発生したため、Microsoft Office Excelを終了します。ご不便をおかけして申し訳ありません。」
とかいうふざけたエラーが出てくる。

俺の記憶が確かなら、
グローバル変数とか配列を大量に使いだした辺りでぶっ壊れた気がする。
メモリを開放しなきゃいけないとか、そういうことなのか???

702:デフォルトの名無しさん
09/11/21 19:05:46
エクセルのブック自体が変なメモリリークをしてぶっ壊れるってのをよく聞くぜ。

703:デフォルトの名無しさん
09/11/22 00:08:50
>>680
MSのサイトにoutlook使ったメール送信のサンプル見つかると思うから
それを参考にしたら?
Accessに取り込んだ内容を登録したメアドにoutlook使って送信するPG
を昔作ったことがあるから、出来るはずだよ
ウイルス対策用(だろうなぁ・・)で1通単位でダイアログ押という仕様の
回避用のexeも見つかると思うから探してくれい


704:デフォルトの名無しさん
09/11/22 14:29:02
excel 2007
xp sp3

Sheet1のA1にSheet2を参照とした「=SUM(Sheet2!$A$2:Sheet2!$A$3)」を入れる為のマクロ、

Sub test()
Sheet1.Cells(1, 1).Formula = "=SUM(" & Sheet2.Cells(2, 1).Address & " : " & Sheet2.Cells(3, 1).Address & ")"
End Sub

ですと、Sheet1のA1には同一シートを参照とした「=SUM($A$2:$A$3)」となってしまいます。

"=SUM(" & Sheet2.Cells(2, 1).Address & " : " & Sheet2.Cells(3, 1).Address & ")"の部分を
"=SUM(Sheet2!$A$2:Sheet2!$A$3)"にすれば解決するのはわかっておりますが、
どうしてもcellsを使いたく質問させていただきました。
解決策がありましたら、宜しくお願いします。


705:デフォルトの名無しさん
09/11/22 14:39:40
>704

突っ込み所がいろいろと・・・
本題は数式のINDIRECTで解決しそうな気がするが?

706:デフォルトの名無しさん
09/11/22 14:51:06
>>704
Sheet2.Cells(2, 1).Address
が何を返すかを考えればいいんじゃね?

Sheet2.Cells(2, 1).Addressって書き方をするのも珍しい.....

707:デフォルトの名無しさん
09/11/22 19:21:46
プログラミング経験なしで興味を持ち趣味で覚えたいと思い色々考えた結果、
javascriptとvbscriptを学ぼうと思いました。入門するために言語について探しているうちに、
下記のようなことがしてみたいと思ったのですが、出来るのかということと、
もっと適した言語があるのかをご存知であれば助言くださるとうれしいです。

過去の株価を利用したシミュレーションプログラム。
具体的には、データとして興味のある某銘柄の日柄(日別に始値、高値、安値、終値、出来高)
を10年分オープンオフィスの表計算calcにyahooファイナンスから入手しました。
例えば、このデータを使って特定の日にその株を1000株買い、以降10円上がれば売り、売り値から
10円下がればまた買い、その買値より10円下がれば買い増し(仮の現金残高がなくなるまで)し、
それぞれは買値より10円上がると売る。
持ち株がなくなると、高値から1割下がったところからまた始める。
というようなことを繰り返すと、いくらの利益でいくらの買値ので
どれぐらい持ち株になった状態かを結果としてだすものです。

javascriptやvbscriptでも出来るのでしょうか、それとももっと別のスクリプト
言語の方が適しているのでしょうか?
よろしくお願いします。。

708:デフォルトの名無しさん
09/11/22 20:19:54
何か変なヤツが迷い込んでるな~

709:デフォルトの名無しさん
09/11/22 20:45:53
>>707
ようは売買システムのバックテストしたいんだろ
できるよ

というか言語で出来ることが制約されるケースは少ない
もちろん得意、不得意はあるけど
ってことで好きな言語使いな
そして、このスレ以外に逝け

710:デフォルトの名無しさん
09/11/22 20:56:01
>>707
ExcelVBAがいいんじゃないか?

711:701
09/11/22 20:57:29
>>702
MSのバグかよ。

データはエクセルから取得して、処理は他(とりあえずDelphiを考えている)でやって、
結果をまたエクセルに返すかな・・めんどくさ・・

712:デフォルトの名無しさん
09/11/22 21:10:43
うっはっっw

MSのバグ扱いかよw

713:701
09/11/22 21:26:24
>>712
じゃあ原因は何なんだよ

714:デフォルトの名無しさん
09/11/22 22:12:12
確かに、ウィンドウズもエクセルもMSだな。
そう考えたら、世の中で起きるバグの50%はMSのバグと云っても過言ではない。

715:デフォルトの名無しさん
09/11/22 22:31:13
>>714
だがオレのPCのバグは99%オレのバグと言っても過言ではない

何度PCや開発ソフトのせいにして、その後取り下げたことか・・・

716:デフォルトの名無しさん
09/11/22 22:41:02
>>715
wwwww

717:デフォルトの名無しさん
09/11/22 23:50:32
>>715
まぁ、シンタックスエラーなら仕方ないな。

718:デフォルトの名無しさん
09/11/23 10:52:45
>>510-544
お前らwwwww
今更だけどツボったwwwww
そういうセンスがいるんだなコーディングって俺まだまだだわ。

719:デフォルトの名無しさん
09/11/23 11:34:44
>>707
15マソぐらいとちょっと高いけど、検証くんなどソフトもあるぞ

720:デフォルトの名無しさん
09/11/23 15:05:25
excel2003

こんにちは

For Nextを使い、
セルE5、E6、E7へそれぞれ「H線」「L線」「中心線」という文字を入れたいのですがどうすればよろしいでしょうか?

For i = 1 to 3
Cells(5,i + 4) = ?
next i

721:デフォルトの名無しさん
09/11/23 15:30:19
x = Array("H線", "L線", "中心線")
For i = 1 To 3
Cells(5, i + 4) = x(i - 1)
Next i

初心者の発想はこんな感じ。

722:720
09/11/23 15:45:34
>>721

早速のご回答、誠に有り難うございます。
>>721様のおかげで解決できましたので、心より御礼申し上げます。


723:デフォルトの名無しさん
09/11/23 16:22:36
初心者に配列はいきなりきついんじゃないか?

724:デフォルトの名無しさん
09/11/23 16:31:36
>>720
For-Next使う必要ないじゃん

For i = 1 To 3
Next i
Range("E5").Value = "H線"
Range("E6").Value = "L線"
Range("E7").Value = "中心線"

725:デフォルトの名無しさん
09/11/23 17:07:02
>>723
配列無しで出来る?
俺には思いつかなかった

726:デフォルトの名無しさん
09/11/23 17:21:26
>>724よく見たら笑えるww三回回ってワン

あれは配列のお勉強だったんじゃね?

727:デフォルトの名無しさん
09/11/23 17:32:17
For i = 1 to 3
Cells(5,i + 4) = Iif(i=1,"H線",Iif(i=2,"L線","中心線"))
next i

配列思いつかなくてもできるじゃん不気味で自分はこんなの書きたくないけど。

728:デフォルトの名無しさん
09/11/23 18:01:59
なんでループにすんの?

729:デフォルトの名無しさん
09/11/23 19:07:59
これはどうですか
For i = 1 To 3
Cells(5, i + 4) = Choose(i, "H線", "L線", "中心線")
Next i

730:デフォルトの名無しさん
09/11/23 19:14:19
x = Array("H", "L", "中心")
For i = 1 To 3
Cells(5, i + 4) = x(i - 1) &"線"
Next i

731:デフォルトの名無しさん
09/11/23 19:17:41
vbaにもchoose関数あるの初めて知ったわw

732:デフォルトの名無しさん
09/11/23 19:29:47
同じく、知らんかった。へ~。。。

733:デフォルトの名無しさん
09/11/23 20:05:46
x = Array("H", "L", "中心")
ReDim y(1 to 1 , 1 to 3 )

For i = 1 To 3
y(1 , i)=x(i - 1) &"線"
Next i

Range("E5:E7")=y


もしもしからなので動くかどうかはしらね

734:デフォルトの名無しさん
09/11/23 21:37:37
>>724
お前>>718だろ?w

735:デフォルトの名無しさん
09/11/23 21:44:02
>>720
>>529流に書くとこうだな。
For i = 1 To 3
Next
Range("E6:E8").Value=WorksheetFunction.Transpose(Split("H線 L線 中心線"))

下が普通だが。
For i = 1 To 3
Next
Range("E6:E8").Value=WorksheetFunction.Transpose(Array("H線","L線","中心線"))

736:デフォルトの名無しさん
09/11/23 21:53:08
おまいらForがかわいそうとかNextが不憫とか思わんの?

737:デフォルトの名無しさん
09/11/23 21:58:09
>>721の一部修正
x = Array("H線", "L線", "中心線")
For i = 1 To 3
Range("E5").Cells(1, i).Value = x(i - 1)
Next i


738:デフォルトの名無しさん
09/11/23 22:02:05
なんだChooseがVBAで使えるのかよ。
俺も知らんかったわ。

739:デフォルトの名無しさん
09/11/23 22:11:42
何もないのに回っているFor-Nextを思うと萌える

740:デフォルトの名無しさん
09/11/23 22:25:43
For i = 1 To 3
Next i
Range("E6:E8").Value = [{"H線";"L線";"中心線"}]

741:デフォルトの名無しさん
09/11/23 22:28:06
Evaluateか、なるほどそれもあるな。

742:デフォルトの名無しさん
09/11/23 22:28:09
Sub 萌()
Do
Loop
Exit Sub

743:デフォルトの名無しさん
09/11/23 22:33:23
>>739
何もなくても行数を稼ぐのが昔はプロの技と言われたもんだぜ

744:デフォルトの名無しさん
09/11/23 22:35:06
ボッタクリの末路は...

745:デフォルトの名無しさん
09/11/23 22:43:56
>>742
無限ループって怖くね?
スレリンク(prog板)

746:デフォルトの名無しさん
09/11/24 00:22:51
  i = 1
Loop1:
  If i > 3 Then GoTo Loop1_End
  Select Case i
    Case 1: Cells(5, 5).Value = "H線"
    Case 2: Cells(5, 6).Value = "L線"
    Case 3: Cells(5, 7).Value = "中心線"
  End Select
  i = i + 1
  GoTo Loop1
Loop1_End:

747:デフォルトの名無しさん
09/11/26 14:22:47
Ruby 1.9 And Rails 3.0
URLリンク(www.slideshare.net)

748:デフォルトの名無しさん
09/11/26 15:55:58
>>745
ずーっと萌え続けるからいいんじゃね

749:デフォルトの名無しさん
09/11/26 17:09:50
URLリンク(www.nikkei.co.jp)

750:デフォルトの名無しさん
09/11/26 17:39:38
まったくズブの素人です。
これからブイバ初めても間に合いますか?
プログライミングをでけるようになりたいから
手始めにVBAから勉強するのか迷い中です。
何か時代は.NETでブイビーも.NET
それじゃ~ブイバももう手遅れなんでしょうか?

751:デフォルトの名無しさん
09/11/26 17:47:16
373 デフォルトの名無しさん [] 2009/11/26(木) 17:41:52 ID: Be:
パイソンって強そうな名前ですが、本当につおいのですか?
でもちょっとHでもありますが。。

752:デフォルトの名無しさん
09/11/26 18:39:28

暇人


753:デフォルトの名無しさん
09/11/26 19:17:14
>>750

プログラミング云々以前に日本語を正しく書けるようにしろよ
「プログライミング」とか「ブイバ」とかさ、、、w

それに間に合うとか間に合わないかとかの問題じゃないと思うよ。
Excelでやらせたい事があるんだったらVBAだろうし。


754:デフォルトの名無しさん
09/11/26 20:41:09
>>753
あっプログラミングの間違い、頭ではプログラミングつって
書いた覚えなんだけんど。
そんでブイバって読むんとちゃうんかいな。長いでど
ブイビーエーとでも言うんですか?
田舎もので素人だもんで、そげんこつも誰も教えてくれんから、
愛嬌ということで。。

755:デフォルトの名無しさん
09/11/26 20:49:00
972 デフォルトの名無しさん [sage] Date:2009/11/23(月) 17:09:32  ID: Be:
    ID強制になるだけで静かになるよ

973 デフォルトの名無しさん [] Date:2009/11/23(月) 18:02:02  ID: Be:
    その変更はキミに任せるから提案してくれ。

974 デフォルトの名無しさん [] Date:2009/11/23(月) 18:18:58  ID: Be:
    反対するのは荒らしたい奴だけだから強行しちゃって良いよ

756:デフォルトの名無しさん
09/11/26 21:23:18
↓うーんセフセフのAA

757:デフォルトの名無しさん
09/11/27 21:27:13
↑そのAA持ってないんですいませんがw

Excel2007
テキストボックスについてですが。
MultiLineをtrueに、ScrollBarsをfmScrollBarsBoth
にセットして、データの表示(更新)用に使っています。

表示する時にマウスのホイールボタンでスクロール出来るようには
出来ないのでしょうか?



758:デフォルトの名無しさん
09/11/28 01:08:03
yes we can

759:720
09/11/28 11:55:34
EXCEL 2007

こんにちは

マクロを使い、オートフィルで連続データを作成しているのですが、
書式もオートフィルされてしまい困っています。

値だけをオートフィル(連続データ)するやり方があればご教授ください。
宜しくお願いします。




760:デフォルトの名無しさん
09/11/28 12:12:04
.value

761:デフォルトの名無しさん
09/11/28 12:18:21
マクロの記録でやってんのかな
試したけど無理っぽいから、あきらめてきちんとコードを組む

762:デフォルトの名無しさん
09/11/28 12:40:59
構文 Object.AutoFill(Destination, Type)

設定項目 内容
Object Rangeオブジェクトを指定
Destination オートフィルの書き込み先のRangeオブジェクトを指定
Type 入力されるデータの種類を指定。XlAutoFillクラスの定数を指定

XlAutoFillクラスの定数
・xlFillDefault:標準のオートフィル
・xlFillSeries:連続データ
・xlFillCopy:コピー
・xlFillFormats:書式のみコピー
・xlFillVaules:書式なしコピー
・xlFillYears:年単位
・xlFillMonths:月単位
・xlFillDays:日単位
・xlFillWeekdays:週日単位
・xlLinearTrend:加算
・xlGrowthTrend:乗算


763:デフォルトの名無しさん
09/11/28 13:02:02
でも書式コピー梨、連続(加算)は出来ないっぽいよ

764:デフォルトの名無しさん
09/11/28 16:03:46
たぶんそうだよねー
オートフィルもExcelマクロっぽくて悪くないと思うから
とりあえずオートフィルして書式は別に直すとか

765:デフォルトの名無しさん
09/11/28 18:56:46
質問です。
Excel VBAからワードや他のエクセルファイルの操作ってできますか?
やりたいこととしては、VBAを仕込んだxlsファイルに、
置換したい文章を記述し(置換前と置換後をシート内に記述)、
指定したフォルダ内(サブ含む)にあるエクセルファイルやワードファイルに
書かれている文章を変換したいのです。

その際、「この文章を変換しました」みたいなログも出せたら最高なのですが、
いい方法ってありますか?

766:デフォルトの名無しさん
09/11/28 18:58:00
yes we can

767:デフォルトの名無しさん
09/11/28 19:10:59
>>765
VBAから他のファイルを操作できる

ログは画面にだすならmsgboxでいいでしょ
フィルに書き出したいならテキストファイルでもオープンして書き出せばよい

768:759
09/11/28 20:18:10
>>761>>763>>764
ご回答、ありがとうございます。

やはりむりですか・・・
オートフィル以外でいくつかつくったのですが、スピードを重視したくオートフィルにこだわっていました。
やりたいことは、A1の値を基にB1:B100までA2で指定された増分値に沿った降順連続データをつくりたかったのです。
考えついたものを下記に貼りますので、改善点やより良いコードがありましたらご教授ください。
宜しくお願いします。

Sub test1()
基準値 = Cells(1, 1).Value
増分値 = Cells(2, 1).Value
For i = 0 To 99
Cells(1 + i, 2).Value = 基準値
基準値 = 基準値 - 増分値
Next i
End Sub

Sub test2()
基準値 = Cells(1, 1).Value
増分値 = Cells(2, 1).Value
For i = 0 To 99
Cells(1 + i, 2).Value = 基準値 - i * 増分値
Next i
End Sub

Sub test3()
増分値 = Cells(2, 1).Value
For i = 1 To 100
Cells(i, 2).Value = WorksheetFunction.Sum(Cells(1, 1).Value, Cells(2, 1).Value - i * 増分値)
Next i
End Sub

769:デフォルトの名無しさん
09/11/28 20:28:08
>>767
具体的にはどのようにするんでしょう・・・<ファイル操作
また、AAAという単語はヒットしたので置換したけど、
BBBという単語がない場合、AAAだけ置換したよ、というログとかも取れますか?

770:デフォルトの名無しさん
09/11/28 21:01:43
Excel VBA WEB連携術って本みつけたんだけど誰かレビューしてくれませんか?

ちなみにieを使ったシステムへの自動化を考えてます。
それの助けになるか聞きたいです。

771:デフォルトの名無しさん
09/11/28 21:08:53
>>770
おし引き受けた!


レビュー:
読んだことないけど多分読まないよりましじゃね?

772:デフォルトの名無しさん
09/11/28 23:39:43
>>770
何をやりたいのかもうちょっと詳しく

自動化って言えば聞こえはいいけど、よくよく話を聞いてみると
たいていは株とかFXとかで楽して儲けたいだけみたいなのが多い

773:デフォルトの名無しさん
09/11/28 23:44:31
>>769
例えば、マクロ記録で目的のファイルを開いて、できたブックからシートを自分のシートに移動する
で、移動してきたシートをコピーしといて、どちらか一方を置換する
あとは置換後に双方を比較して、違う部分を表示するとか

他にも方法は山ほどある
まずは自分でアウトラインを固めて、ポイントを絞って質問してくれないと回答しようが無い

774:デフォルトの名無しさん
09/11/28 23:45:54
>>772
まぁ株なりFXの自動売買だろ
そして、この程度も自分で調べてできない人間はロクなシステム組めないに1000ガバス


775:デフォルトの名無しさん
09/11/28 23:57:41
>>773
すいません、大雑把にしか書いてなかったので答えることもできなかったですねorz
仕様としてはこんな感じです。

VBAを記述したExcelに、置換前・置換後を記述したの置換リストをシートとして作成しておきます。
[VBA記述xlsファイル上の置換リスト]
置換前 | 置換後
------------------
ABC   | XYZ
log-in  | log in
login   | log in

そのシート上にフォルダを指定するセルを用意し、ボタンを押す(マクロ実行)ことで、
指定されたフォルダ(サブフォルダ含む)にあるxlsファイル、docファイルを参照。

ヒットしたファイルの中に、置換リストの置換前と同じ文章があった場合、
ログとして「(ファイル名)▲▲を●●に置換」のような情報を出力し、置換を行います。

うまく纏まっていないかもしれないですが、このような仕様でつくりたいと思っています。
ググってみた感じ、ワードファイルの文章置換を行うロジックはあったのですが、
「本当に置換を行ったか」が取得できなさそうな感じがして・・・。
(▲▲があれば●●に置換する、という処理なので、▲▲がなくても変換せずに処理が終わるはず。変換したか?という状態が取れない感じが)


776:デフォルトの名無しさん
09/11/29 00:06:24
このスレはプログラマにとっては有益なスレで
クレクレ君には無益なスレです
テンプレ参照

777:デフォルトの名無しさん
09/11/29 01:18:29
プログラマにとっては有益 ← ここ、笑うところ?

778:デフォルトの名無しさん
09/11/29 01:22:35
ゆとりには笑うとこまで指示してやらんと

779:デフォルトの名無しさん
09/11/29 02:30:54
OSはXP
バージョンは2002です。


単刀直入に聞きます
「ユーザーフォーム上に設置したスプレッドシート」

これをエクセルのシートのように読み込む(ActiveSheet.Range(Cells(1, 1)~のような書式)ことは可能でしょうか?

780:デフォルトの名無しさん
09/11/29 10:31:56
>>779
可能

781:デフォルトの名無しさん
09/11/29 14:03:26
vistaを使ってると、IE7がプリインストールしてあるためにウェブクエリ取得やIEの操作などが正常に作動しないことがあります。
そこで、windows7にはXPモードがあると聞きました。そのXPモードで使われるIEがバージョン6なのかが気になっています。
IE6を使えるなら早めにwindows7搭載のPCに買い替えるつもりです。どうかお教えください。

782:デフォルトの名無しさん
09/11/29 14:41:08
IE6を使える

783:デフォルトの名無しさん
09/11/29 14:46:46
まずIEはバージョン6

注意事項としてXP Modeは Windows 7 Professional 以降で搭載される。
一般のメーカー製 Windows 7 プレインストールPCはほとんどが Home Premium でXP Modeは搭載されてないので注意

あと、XP Modeといっても特に他アプリと連携するような場合には
正常に動作するか分からないのでできれば事前にどこかで確認してみることをすすめる
おそらく統合機能ってのを使わなければ、ほぼ問題ないとは思うけど、統合機能使わないと XP Mode の利点はあまりないと思うし

784:デフォルトの名無しさん
09/11/29 15:05:34
バーチャルPC使えよ

785:781
09/11/29 17:48:41
やはりMSなりに問い合わせたほうが無難なのですね。
バーチャルPCについて調べてみましたが、これならvistaでもxpを動かせるのですね。インストールして試してみます。
ありがとうございました。

786:デフォルトの名無しさん
09/11/30 15:26:51
Excelの関数の質問なのですが
入力した数字が6~10のとき○、11~15のとき◎

   A  B
1  6  ○
2  11 ◎

という風に○や◎を表示させたいのですが、関数がどうしてもわかりません。
どなたかよろしくお願いいたします。

787:デフォルトの名無しさん
09/11/30 15:33:26
VBAと関係ないね

788:デフォルトの名無しさん
09/11/30 15:52:52
すみません、間違えました。

789:デフォルトの名無しさん
09/11/30 19:19:49
Function Maru(n)
  Maru = ""
  If (6 <= n) And (n <= 10) Then Maru = "○"
  If (11 <= n) And (n <= 15) Then Maru = "◎"
End Function

790:デフォルトの名無しさん
09/11/30 22:39:34
リストボックスで数値の項目を右詰めにしたいんですが、どうすればよいでしょうか?
2007です。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch