UWSC 掲 示 板
投稿時に「証明書が不正です」と出る場合には、JavaScriptをオンにしてください
動作不具合での質問の場合には環境(OS,IEのバージョン等)の表記もしてください
タイトルは質問内容を表したものにしてください
ネットゲーム関係の質問はご遠慮ください

Excel2002のオプションの変更 / みつ
おはようございます。
Excel2002のオプションを以下のようにCOMを使用して変更したいのですが可能でしょうか?

ツール - オプション - 計算方法 - 自動 - OK

GETIDとSCKEYを使用するしかないのでしょうか?
調べてみたのですが分からなかったのでご教授をよろしくお願いします。

No.3437 2017/01/28(Sat) 08:56:53

Re: Excel2002のオプションの変更 / yanyan
Excel2010ですが、マクロ記録すると、下記のようです。

CONST xlAutomatic = -4105
Application.Calculation = xlAutomatic

No.3440 2017/01/28(Sat) 20:23:16
特定のページでcomでテキスト取得する方法 / あゆみ
自分が運営しているサイトのテキストを取得する為、テキスト解析を使用して下記まで調べる事ができました。このテキスト1、テキスト2を取得する方法ないでしょうか?
検索で調べていまいち分かりません。

IE=GetActiveOLEObj("InternetExplorer.Application")
doc=IE.document
上のコード使うとは思いますが、どうしたらできるでしょうか?


doc.forms(1).elements(14).value :"テキスト1"


doc.forms(1).elements(14).defaultValue :"テキスト1"


doc.all.tags("input").post_title.value :"テキスト1"


doc.forms(1).elements(38).value :"テキスト2


doc.forms(1).elements(38).defaultValue :"テキスト2

No.3438 2017/01/28(Sat) 13:13:26
フォルダーの中のAファイルを除いて処理する方法 / NER
質問ばかりですみません。
フォルダーには、Aファイル、Bファイル、Cファイルが入っています。
下記のコードでフォルダー内のAファイルを除いてBファイル、Cファイルに処理する方法はないでしょうか?

PATH1 = "C:\Users\tesuto\xlsm"
NUM = GETDIR(PATH1) //ファイルの数だけならNUM
nozoku="Aファイル"
//配列を展開
FOR A = 0 TO LENGTH(GETDIR_FILES) - 1
sent=CHGMOJ( GETDIR_FILES[A], ".xlsm","")
sent1=PATH1+"\"+sent

o_XL = CREATEOLEOBJ("Excel.Application")
o_XL.visible = True
o_XL.WorkBooks.Open(FileName :=sent1)
o_ws=o_XL.ActiveSheet.Name

o_XL.RANGE("c1").value = "テキスト文字"
xlclose(o_XL)
next

No.3431 2017/01/27(Fri) 14:03:06

Re: フォルダーの中のAファイルを除いて処理する方法 / stuncloud
> 質問ばかりですみません。
はい

処理の分岐はifやselectを使います
以下はselectの例です

nozoku="Aファイル"
FOR A = 0 TO LENGTH(GETDIR_FILES) - 1
 sent=CHGMOJ( GETDIR_FILES[A], ".xlsm","")
 select sent
  case nozoku
   continue
  default
   // ファイルに対する処理
 selend
next

sentがnozoku(Aファイル)であったらスキップします
それ以外は処理が行われます
continueはループの次の周回へ行けという命令ですが、今回の書き方ですとなくても結果は同じになりますね

条件分岐はとても基本的なことですがとても重要です
先の質問もそうですが、条件分岐なしには書けないということがわかったと思います
まずはifの使い方を覚えてみましょう
上記のコードはifで書き直すこともできるので、挑戦してみてはいかがでしょうか

No.3433 2017/01/27(Fri) 14:49:20

Re: フォルダーの中のAファイルを除いて処理する方法 / NER
回答ありがとうございます。無事希望通りの処理ができました。
UWSCの奥深さ、極めたらどうなるか楽しみです。
もっと学んでいきたいと思います。
stuncloud様のスクリプトを参考にIF文に直してみました。
下記がコードです。
nozoku="Aファイル"
PATH1 = "C:\Users\tesuto"
NUM = GETDIR(PATH1) //ファイルの数だけならNUM

FOR A = 0 TO LENGTH(GETDIR_FILES) - 1
sent=CHGMOJ( GETDIR_FILES[A], ".xlsm","")

if nozoku=sent then
continue
else
   // ファイルに対する処理

endif

next

No.3434 2017/01/27(Fri) 22:28:26
対象文字列をテキストファイルの中の文字列から検索して一番先頭にもっていく方法 / NER
テキストファイルの中の文字列から、特定の単語を消して、その特定の単語を先頭に持っていく方法を探しています。

下記までは作成したのですが、ここからどうしたらいいか分かりません。
ご教授願えませんか?

mozi="検索して先頭行に表示させたい文字列"

hensu2=fopen("C:\Users\修正ファイル分.txt", F_WRITE8 or f_read)
naiyo=fget(hensu2,F_ALLTEXT)
fput(hensu2, mozi,"1")

fclose(hensu2)

テキストファイルに下記のテキストが入力されているとします。

大阪
東京
名古屋
沖縄

これを下記のようにしたい。検索文字を名古屋として。

名古屋
大阪
東京
沖縄

No.3428 2017/01/27(Fri) 10:54:20

Re: 対象文字列をテキストファイルの中の文字列から検索して一番先頭にもっていく方法 / stuncloud
検索文字が確実にテキスト内に存在し、かつ行に書かれた文字列と完全一致する場合のサンプルです

file = "C:\Users\修正ファイル分.txt"
target = "名古屋"

fid = fopen(file, F_READ or F_WRITE8)
for i = fget(fid, F_LINECOUNT) to 1 step -1
 if fget(fid, i) = target then
  fdelline(fid, i)
 endif
next
fput(fid, target, 1, F_INSERT)
fclose(fid)

検索文字がテキスト内に存在しない場合を考慮したり部分一致でやりたいという場合はもう少し工夫が必要です

No.3430 2017/01/27(Fri) 11:46:11

Re: 対象文字列をテキストファイルの中の文字列から検索して一番先頭にもっていく方法 / NER
stuncloud様、回答ありがとうございます。希望通りの処理ができました。
このスクリプトを自分の今の実力では全然思いつきませんでした。
もっと、勉強していきたいと思います、ありがとうございました。

No.3432 2017/01/27(Fri) 14:05:31
Excelのc列を挿入する方法 / NER
エクセルでc列に列を挿入する方法を探しています。以下のコードを試してもうまくいきません。
何か良い方法ないでしょうか?

//エクセル既存ファイル起動

//.xlsm拡張子必要なし
hensu="C:\Users\Desktop\tesuto.xls"

EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
Excel.WorkBooks.Open(FileName :=hensu)
XLACTIVATE( Excel, "Sheet1")

EXCEL.Columns("c:c").Select
Selection.Insert Shift:=xlToRight

No.3426 2017/01/27(Fri) 07:27:16

Re: Excelのc列を挿入する方法 / しろまさ
最後の一行を変更。

CONST xlToRight = -4161
EXCEL.Selection.Insert(Shift:=xlToRight)

No.3427 2017/01/27(Fri) 09:51:05

Re: Excelのc列を挿入する方法 / NER
しろまさ様、回答ありがとうございます、無事できました。
No.3429 2017/01/27(Fri) 10:58:05
(No Subject) / カルロス
なるほど、分数で表記するわけですか。ぶっちゃけこのようなuwsファイルを速く動かしたいときには
どこにsleepを入れればいいのでしょうか

While True
MMV(1184,49,515)
MMV(1399,22,16)
ACW(GETID("(無題)(更新) - 秀丸","Hidemaru32Class"),1252,12,640,759,0)
BTN(LEFT,CLICK,1400,21,312)
KBD(VK_SHIFT,DOWN,999)
KBD(VK_DOWN,CLICK,468)
KBD(VK_SHIFT,UP,109)
KBD(VK_CTRL,DOWN,671)
KBD(VK_X,CLICK,406)
KBD(VK_CTRL,UP,78)
MMV(1401,15,624)
MMV(873,10,15)
ACW(GETID("temp - Windows ムービー メーカー","MovieMakerWndClass"),4,1,1004,1029,0)
BTN(LEFT,CLICK,873,10,172)
KBD(VK_ALT,DOWN,1622)
KBD(VK_ALT,DOWN,499)
KBD(VK_ALT,DOWN,32)
KBD(VK_E,DOWN,15)
KBD(VK_ALT,UP,156)
KBD(VK_E,UP,0)
KBD(VK_E,CLICK,718)
KBD(VK_TAB,CLICK,2028)
KBD(VK_CTRL,DOWN,780)
KBD(VK_V,CLICK,327)
KBD(VK_CTRL,UP,78)
KBD(VK_BACK,CLICK,1045)
KBD(VK_SHIFT,DOWN,1326)
KBD(VK_TAB,DOWN,218)
KBD(VK_SHIFT,UP,203)
KBD(VK_TAB,UP,0)
KBD(VK_DELETE,CLICK,655)
MMV(877,5,1201)
MMV(1410,26,15)
BTN(LEFT,CLICK,1410,26,359)
ACW(GETID("(無題)(更新) - 秀丸","Hidemaru32Class"),1252,12,640,759,0)
KBD(VK_SHIFT,DOWN,1170)
KBD(VK_DOWN,CLICK,297)
KBD(VK_SHIFT,UP,218)
KBD(VK_CTRL,DOWN,702)
KBD(VK_X,CLICK,375)
KBD(VK_CTRL,UP,63)
KBD(VK_SHIFT,DOWN,468)
KBD(VK_DOWN,CLICK,187)
KBD(VK_SHIFT,UP,94)
KBD(VK_DELETE,CLICK,562)
MMV(1408,16,982)
MMV(165,173,16)
BTN(LEFT,CLICK,165,173,249)
ACW(GETID("temp - Windows ムービー メーカー","MovieMakerWndClass"),4,1,1004,1029,0)
KBD(VK_CTRL,DOWN,764)
KBD(VK_V,CLICK,499)
KBD(VK_CTRL,UP,172)
KBD(VK_RETURN,CLICK,655)
KBD(VK_TAB,CLICK,1560)
KBD(VK_TAB,CLICK,203)
KBD(VK_RETURN,CLICK,920)
KBD(VK_RIGHT,CLICK,1623)
MMV(169,173,1030)
MMV(1074,46,15)
Wend

No.3402 2017/01/22(Sun) 22:35:38

Re: / MM
工夫すれば出来るの真意は、その機能を自力で実装する、です。
貴方の望むような形での機能はありませんので他のソフトを当たるか、
誰かに発注して有償で作ってもらうかしてください。

No.3403 2017/01/22(Sun) 22:39:48

Re: / カルロス
なるほど。基本的なユーザインターフェイスや動き方は気に入っていたので残念です。どなたか、だいたい同じような感じのフリーウェアのマクロソフトで、倍速機能が付いているおすすめソフトがありましたら、ご紹介いただけるとありがたいです。
No.3405 2017/01/22(Sun) 23:22:48

Re: / tmp
調べる事も苦労もしない人に教える人はいるのでしょうか?
他のソフトですか?そんな事ここで聞くものではないかと思います。

No.3406 2017/01/23(Mon) 10:09:58

Re: / stuncloud
荒れてますね
以下は一応出来なくはないよ、という話です

前のスレッドで俄プログラマーがおっしゃっていたことを提示されたスクリプトでやる場合はsleepを使うわけではありません

> MMV(1184,49,515)
> BTN(LEFT,CLICK,1400,21,312)
> KBD(VK_SHIFT,DOWN,999)


主にこのMMV、BTN、KBDという関数で構成されていますが、これらの最後の引数は
> 実行までの待ち時間 (ミリセカンド)
です
つまりこれをいじれば早くなるんですね

----------------------------
速度 = 1 //2倍速の時は2
MMV(1184,49,515/速度)
BTN(LEFT,CLICK,1400,21,312/速度)
KBD(VK_SHIFT,DOWN,999/速度)
----------------------------

といった感じにすべてのMMV、BTN、KBDの最後の引数に「/速度」を付ければ変数「速度」に入れた値によって速度調整できるようになるというわけです
MMV(1184,49,0)
MMV(1184,49)
のように実行までの待ち時間を0にするか省略すれば最速で動作します

No.3407 2017/01/23(Mon) 10:58:54

Re: / カルロス
No.3407さま
ありがとうございます。まさに私が聞きたかった解決法です。これなら手間を掛けずに倍速動作が可能ですね。重ね重ねありがとうございました。

No.3406
>調べる事も苦労もしない人に教える人はいるのでしょうか?
いましたね。
上から目線でモノを言いたいだけの役立たずはすっこんでてください。

No.3409 2017/01/23(Mon) 14:47:15

Re: / stuncloud
カルロスさん
> 上から目線でモノを言いたいだけの役立たずはすっこんでてください。
ええと、あなたもそういうこと言わんでくださいますかね…
思うのはぜんぜん構わんので、でも腹に抱えといとくだけにしてください…

プログラムを書くということの性質上なのか、このような場では「人に聞くばかりで自分の手をあまり動かそうとしない人」というのは嫌われる傾向にあります
いわるゆ「教えて君」のような呼ばれ方をする人ですね
あなたの質問や受け答えからそのような人だと思われたという可能性があり、ついきつい言い方になってしまう人が出てくるのは理解できます
実際僕のあなたに対する印象もそのようなものでありました

ただ、文面から受ける印象とその人の実際が合致するとも限りませんし、あまりそんなことでいざこざが起こるのも好みません
ですのでひとまず(おそらくあなたが求めているであろう)回答を提示しました

ちなみに僕の最近の回答スタンスは「とりあえず答えを提示する」です
これが一番スムーズです
かつては安易に答えだけ教えるのは良くないのではないかと思っていました
いわゆる教えて君な感じの人には特に、自分で考えようとしない姿勢が気に入らないという気持ちがあったんですよね
ただそれは全部こちらの思い込みですし、それで意地悪したところでなんもいいことないです

ことプログラミングに関しては人に聞く、ということは絶大な効果があったりします
みなさんも経験があるんじゃないかと思うんですが、独学では理解できなかったことが誰かの一言で途端に理解できた、といったことがありますよね
たったそれだけのことで一気に習熟が進むことを身を以て知っているので、僕はそのものズバリの答えを教えることに躊躇しなくなりました
プログラムで何につまづいて、またどのようにつまづいているかって人によるのでそのあたりの事情って質問からでは読み取れない事が多いです
でも、解答となるコードは手段からなにから全部詰まってるわけですよ
そのコードを見た質問者がその場しのぎにコピペするかとかそこから成長するかとかはまぁ、どうでもいいことなんですよ
どうせわかんないし
だったらまぁ後者だといいなぁと思いながら回答したほうがこっちにとってもいいし、答えを求めている相手にとっても良いですよね

あ、もちろん何度も何度も質問を繰り返すひとにはふんわりいい加減にしろって伝えます
あと、具体的にな答えではなくヒントだけでも良さそうな人にはヒントだけ伝えたりもします

とまぁ色々書きましたが、あくまで僕がこうだよって話でみなさんもそうであれってことではないです
ただあまりつっけんどんにしないほうがみんな気持ちよく利用できるよね、ということだけは意識してもらいたいかな…

No.3412 2017/01/23(Mon) 17:00:09

Re: / しろまさ
(o^-^)b いいね!
No.3418 2017/01/23(Mon) 19:41:54

Re: / カルロス
stuncloudさん

ネガティブな反応が返ってくることはわかりきっていたんで、もう書き込まないつもりだったのですが、せっかく長文のレスをいただいたということもありますんで、ちょっとだけ。

おっしゃるとおり私は「教えて君」です。プログラムに限らずいろんな分野で「教えて君」です。で、ほうぼうでこの手のドシロートな質問をするのですが、どの分野の掲示板に行っても必ず居るんですよね。たいした知識もないくせにエラぶりたいだけの人が。教えてgooとかほんとヒドいです。

私はプログラム全くわかりませんが「最後の項目がミリセカンドの待ち時間です」、このたった1行のレスすら返せない人が上級者のわけがない。ほんと笑っちゃいます。

確かに私のレスは常識を欠いたものであることに弁解の余地はありませんが、「自称上級者」が特権的に行使する嘲笑が、私がやったと同じように不愉快の種を撒いていて、時には初心者を萎縮させたり、必要以上にへりくだった態度を取らせていることも、知っていただきたいと思うのです。

No.3419 2017/01/23(Mon) 20:04:07

Re: / MM
皆さん返せないではなく返さなかっただけです。
逆効果な挑発はお勧めしません。
HELPに判りやすく書いてあることなので初心者ですらすぐ判ることです。
判らなくて良い人がいたとしたら、それは、誰かにやらせる人、だけです。
慈悲に満ちた富者からの恵みを頂くのは幸運ではありますが権利ではありません。
教えて君とは、誰かに仕事をやらせる対価を払わないで済まそうとするフリーライダー。
フリーライダーは通常、社会の敵なので、反発心を集めます。

No.3425 2017/01/25(Wed) 21:33:43
1つのスクリプト内で2度目のエクセル起動がエラーになる / jasmine
弥生ソフトからデータを取り出してエクセルに自動で保存する作業をUWSCでやっています。
2種類のデータを保存するので2つのスクリプトを作成しました。
各々のスクリプトは意図通りに動いてデータ保存できるのですが、
この2つを合わせて1つのスクリプトにしたら2つめのエクセルの保存がCOM_errorでできなくなってしまいます。
こちらの解決法がわかる方、教えていただけたら幸いです。



CLKITEM(id, "新規のExcelファイルに書き出す", CLK_ACC)
CLKITEM(id, "OK", CLK_BTN)
ExlApp = GETACTIVEOLEOBJ("Excel.Application")
ExlApp.visible = True
ExlApp.DisplayAlerts = False
ExlApp.Activeworkbook.saveAs("C:\Users\USER\Desktop\Test1.xlsx")
ExlApp.Activeworkbook.close
EXCEL = XLOPEN("c:\Users\USER\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.xlsb")
EXCEL = XLOPEN("C:\Users\USER\Desktop\Test1.xlsx")
EXCEL.Run("PERSONAL.XLSB!xxx")
ExlApp.Activeworkbook.saveAs("c:\Users\USER\Desktop\Test1.xlsx")
ExlApp.Quit
//XLCLOSE(Excel) //エクセルを閉じる 
id = GETID("弥生販売 ….")
////略///
CLKITEM(id, "新規のExcelファイルに書き出す", CLK_ACC)
CLKITEM(id, "OK", CLK_BTN)
ExlApp = GETACTIVEOLEOBJ("Excel.Application")
ExlApp.visible = True
ExlApp.DisplayAlerts = False
ExlApp.Activeworkbook.saveAs("C:\Users\USER\Desktop\Test2.xlsx")
ExlApp.Activeworkbook.close
ExlApp.Quit
EXCEL = XLOPEN("c:\Users\USER\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.xlsb")
EXCEL = XLOPEN("C:\Users\USER\Desktop\Tes2.xlsx")
EXCEL.Run("PERSONAL.XLSB!YYYの作成")
ExlApp.Activeworkbook.saveAs("c:\Users\USER\Desktop\Tes2.xlsx")
ExlApp.Quit

No.3423 2017/01/25(Wed) 15:35:44
EXCELオートフィルター / ROM
お世話になります。
見よう見まねでEXCELのオートフィルタープログラムを作成しています。
何とかオートフィルターまでは出来たつもりですが、”選択行の数”と”選択行”を取得する方法が解りません。
ググったところ、以下の記述を見つけました。


 選択されているセルのすべての行番号を取得する
  Dim rng As Range

  For Each rng In Selection.Columns
   MsgBox rng.Column
  Next rng

知識不足でUWSCへの適用方法が解りません。
何方かご教示いただければ幸いです。
よろしくお願いします。

参考:オートフィルター
oXL=GetActiveOleObj("Excel.Application")
_Filter="XXX"
_CellNumber="C2"
ColumnNumber = oXL.ActiveSheet.Range(_CellNumber).Column
oXL.ActiveSheet.Range(_CellNumber).AutoFilter(Field:=ColumnNumber, Criteria1:=_Filter)
PRINT oXL.Selection.ROWS.count // 「1」と表示される。

No.3408 2017/01/23(Mon) 12:55:00

Re: EXCELオートフィルター / しき
//フィルタリングの結果を取得する場合は、AutoFilterオブジェクトを使います
oXL=GetActiveOleObj("Excel.Application")
o_filter = oXL.ActiveSheet.AutoFilter //AutoFilterオブジェクト
xlCellTypeVisible = 12

//第一列の Ranges
o_ranges = o_filter.Range.Columns(1).SpecialCells(xlCellTypeVisible)
print o_ranges.Count
print o_ranges.Address

n = GetOleItem(o_ranges)
for i=0 to n -1
  o_range = all_ole_item[i]
  print o_range.Row +" "+ o_range.Address(false, false)
next

msgbox(o_ranges.Count +" 行")

No.3411 2017/01/23(Mon) 16:07:44

Re: EXCELオートフィルター / しき
>フィルタリングの結果を取得する場合は、AutoFilterオブジェクトを使います
少し違いました。
AutoFilterオブジェクト は表の範囲を特定するためだけに使っています

o_ranges = o_filter.Range.
の部分は、例えば以下のようにも書けます
o_ranges = oXL.ActiveSheet.Range("C2").CurrentRegion.
o_ranges = oXL.ActiveSheet.Range("A1:C15").

肝は表示行だけを得るための、.SpecialCells(xlCellTypeVisible) です

参考URL
Office TANAKA - Excel VBA Tips[オートフィルタを使い倒す]
http://officetanaka.net/excel/vba/tips/tips155d.htm

No.3415 2017/01/23(Mon) 17:54:05

Re: EXCELオートフィルター / ROM
しき様

ありがとうございます。
お陰様で出来ました!!

No.3422 2017/01/24(Tue) 21:10:56
SHIFTARRAY / SHINJI
SHIFTARRAY関数の引数にSAFEARRAY型の配列変数は使えないのでしょうか?
No.3399 2017/01/22(Sun) 05:27:36

Re: SHIFTARRAY / routa
使えますよ。
d = SAFEARRAY(0, 5)
for i=0 to 5
d[i]=i
next
SHIFTARRAY(d, -2)
for i=0 to 5
print d[i]
next

No.3404 2017/01/22(Sun) 22:41:30

Re: SHIFTARRAY / SHINJI
なるほど動きますね!
一次元配列なら可能で、二次元配列の場合はむりなんでしょうか?
二次元配列のSAFEARRAY型の配列変数を引数にして試していて、それだと動かなくて。

No.3413 2017/01/23(Mon) 17:41:09

Re: SHIFTARRAY / routa
行ごとに一次元配列で指定しましょう。
d = SAFEARRAY(0,1, 0,5)
for i = 0 to 1
SHIFTARRAY(d[i], -2)
next

No.3420 2017/01/23(Mon) 23:34:56

Re: SHIFTARRAY / SHINJI
そういうことだったんですね!
ありがとうございます!

No.3421 2017/01/24(Tue) 01:26:34
なぜか止まる / SHINJI
行数が1103がプリントされた時点で動きが止まってしまいます。型があってないorオーバーフロー
初期値を1000、終了値を1300などとした時も、1103がプリントされた時点で動きが止まってしまいます。
別のスクリプトでは、最終行まで処理をしていたと記憶しているのですが、これはなぜ止まるのでしょうか?
このファイルは4312行あります。

fail="データ 一覧表1.CSV"
fid = FOPEN(fail, F_READ or F_WRITE)  
行数=FGET(fid, -1)
print 行数
print fail
print fid
For 行 = 1 to 行数
print 行
dat=FGET( fid, 行, 16,true )*2.204 //型があってないorオーバーフロー
FPUT(fid,dat,行,23)
next
FCLOSE(fid)

No.3414 2017/01/23(Mon) 17:53:39

Re: なぜか止まる / 俄プログラマー
データ 一覧表1.CSVのファイルの1103行目のデータが文字か空白行等で数値ではないのでは?
No.3416 2017/01/23(Mon) 18:06:48

Re: なぜか止まる / SHINJI
その通りでした!
失礼しました!

No.3417 2017/01/23(Mon) 18:45:38


 過去ログ(〜2017/03/22)・検索ツール


以下のフォームに記事No.と投稿時のパスワードを入力すれば
投稿後に記事の編集や削除が行えます。
200/200件 [ ページ : << 1 ... 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 20 >> | 過去ログ ]