[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 09/20 10:57 / Filesize : 218 KB / Number-of Response : 791
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA質問スレ Part13



1 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 12:25:04 ]
過去スレ
01 pc11.2ch.net/test/read.cgi/tech/1054356121/
02 pc11.2ch.net/test/read.cgi/tech/1168308855/
03 pc11.2ch.net/test/read.cgi/tech/1180192018/
04 pc11.2ch.net/test/read.cgi/tech/1189814602/
05 pc11.2ch.net/test/read.cgi/tech/1197448064/
06 pc11.2ch.net/test/read.cgi/tech/1205231499/
07 pc11.2ch.net/test/read.cgi/tech/1212587819/
08 pc11.2ch.net/test/read.cgi/tech/1219673793/
09 pc11.2ch.net/test/read.cgi/tech/1228372971/
10 pc12.2ch.net/test/read.cgi/tech/1235332603/
11 pc12.2ch.net/test/read.cgi/tech/1241885130/
12 pc12.2ch.net/test/read.cgi/tech/1247566074/

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


497 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 01:34:34 ]
>>496
MSBだけ別の変数にとっとけばいい

498 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 01:41:11 ]
492はどうみてもJavaSな件

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


500 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 20:01:28 ]
Dim col As New Collection

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

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

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

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



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

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

ありがとうございました

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

507 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 11:13:24 ]
OK
バージョン書いてね

508 名前:デフォルトの名無しさん [2009/10/28(水) 13:01:21 ]
ここは宿題かたずけますスレって考えてもいいんですかィ

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

510 名前:デフォルトの名無しさん [2009/10/28(水) 13:55:04 ]
とりあえず書いてみます
Excel2003

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

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

【サーバー各所】ActiveBasicその11【冬眠中】
pc12.2ch.net/test/read.cgi/tech/1241316033/

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

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

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

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



515 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 17:06:49 ]
別のスレでやれ

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

517 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 20:57:08 ]
フリガナにはそれ用のワークシート関数を使う

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

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

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

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

522 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん [2009/10/28(水) 22:07:25 ]
ワークシート関数を使うことに決めました。


524 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:08:51 ]
Mod 演算子を使わないのは速度厨なせいでつか?



525 名前:517 mailto:sage [2009/10/28(水) 22:16:47 ]
detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1414375849

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

526 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:40:03 ]
ワークシート関数はVBAからでも呼び出せるっちゃ呼び出せる

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

528 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:59:33 ]
>>527
Application.Quit

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

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

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

532 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 00:26:27 ]
>>530
>ビット演算なんて分るやつあまりいないんだから

え!そうなの?


533 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん [2009/10/29(木) 01:18:45 ]
>>533

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



535 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 09:15:12 ]
>>532
officeのVBAだと使わないしねぇ
vbaだと知ってても使う場面がほとんど無い品


538 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 09:24:31 ]
>>529
なにそれ面白い


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

539 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:14:21 ]
俺ならこうやって高速化するぜ

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

540 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:21:10 ]
すまんが教えてください

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

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

教えてください。

541 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:21:25 ]
おれならこうだな

for i = n to n
next

542 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:46:51 ]
速さならこっちかな?

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

543 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 13:08:40 ]
さすがにこれは反則だろうな

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

544 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 13:21:48 ]
和 = (1+n)*n/2
Debug.Print 和

ループ

こうか!



545 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 10:22:29 ]
質問させてください。(Excel2003 XP)

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

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

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

よろしくお願いします。

546 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 13:10:43 ]

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

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



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

547 名前:545 mailto:sage [2009/10/31(土) 15:21:48 ]
>546

失礼しました。

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

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

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

よろしくお願いします。


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


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

550 名前:デフォルトの名無しさん [2009/11/02(月) 11:29:29 ]
>>545
ttp://ziddy.japan.zdnet.com/qa5065179.html
これはどう?

551 名前:545 mailto:sage [2009/11/02(月) 22:21:47 ]
>550

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

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

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

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

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

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

ttp://www.hmpage.jp/vb6rtest.htm

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



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

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

557 名前:デフォルトの名無しさん [2009/11/04(水) 21:19:25 ]
AOD.NET って使える?

558 名前:557 [2009/11/04(水) 21:20:45 ]
訂正
ADO.NET

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


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

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

562 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 09:13:04 ]
アタックはやめろ

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

developer.yahoo.co.jp/webapi/search/websearch/v1/websearch.html

564 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 11:05:12 ]
Yahoo! JAPAN Web APIはあきらかにスレ違い



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

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

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



568 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 20:06:01 ]
>565-567

つマクロの記録

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

Excel2003です

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

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

572 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 11:14:38 ]
>574

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

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

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

ありがとでした

578 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 14:05:32 ]
staticでも使え

579 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 17:44:47 ]
イベントループ拾わんといかんだろ

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


582 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 18:10:19 ]
ttp://program.station.ez-net.jp/special/vc/atl-com/variant.asp
ttp://www.hi-ho.ne.jp/babaq/bstr.html
ttp://piza.2ch.net/log/prog/kako/947/947909317.html
support.microsoft.com/kb/167668/en-us/

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

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

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



585 名前:584 mailto:sage [2009/11/09(月) 21:06:44 ]
自己解決しました。
Seek( ファイル番号 ) で取得できました。

586 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 23:44:43 ]
b.hatena.ne.jp/articles/200911/553
会社の仕事でマクロを組むのはズル? 事務作業の効率化に意見さまざま


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

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

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

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

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

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

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


593 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 00:23:58 ]
できるっちゃできる

594 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 20:10:08 ]
知らんがな(´・ω・`)






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<218KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef