トップページtech
1001コメント417KB

Excel VBA 質問スレ Part33

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/10/17(木) 22:04:40.64
ExcelのVBAに関する質問スレです

                   ___
       ___      /____ヽ      ____
      /____\    | |´・ω・`| |    /___ヽ
      .l |´・ω・`|  ニX二 . ̄ ̄ ̄  二X二  |´・ω・`| l 俺たちに任せろ
      !、 ̄ ̄ ̄  ヽ   |       |    /    ̄ ̄ ̄/
       ヽ_/ヽ、  ヽ__)  \__/\_/.   /_/  ノヽ_/
             ̄                ̄ ̄

前スレ
Excel VBA 質問スレ Part32
http://toro.2ch.net/test/read.cgi/tech/1381151717/

このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。

コードが嫌な人はこちらのスレへ
http://toro.2ch.net/test/read.cgi/tech/1381151995/l50
0223デフォルトの名無しさん2014/01/25(土) 22:53:52.87
>>222
Do While 別のシート.特定のセル.Value <> ""
0224デフォルトの名無しさん2014/01/25(土) 22:58:19.12
>>219,220
Set cell_b = cell_a.EntireRow.Offset(1).Resize(2).Find(What:="target2")
じゃないのか

というか>>219のコードでも動いてるっぽいけど
target1が(横方向の)結合セルの場合もあるのか?
だったら>>220のコードでもダメだと思うが
0225デフォルトの名無しさん2014/01/25(土) 23:12:51.30
>>223
素早いご回答ありがとうございます。
更にご質問いたしますが、特定のセル(別シート)をアクティブセルと同一座標から選びたいという時はどうすればいいでしょうか
処理を繰り返した時のアクティブセルがたまたま成績表シートC3なら、
にちゃん太郎シートC3(たまたま決まった座標)が空白の時に処理を止めるという具合です
相対参照を使うのかな?とは思うのですが……
0226デフォルトの名無しさん2014/01/25(土) 23:59:30.44
どういう設計になってんだかサパーリワカンネ
0227デフォルトの名無しさん2014/01/26(日) 00:19:28.82
すみません、わかりにくかったですね
データシートの設計
名前 性別 国語 算数 理科 社会
愛   女  80   60   75  90
02282222014/01/26(日) 00:28:45.75
途中送信してもうたorz

データシートの状態
出席番号 名前 性別 国語 算数 理科 社会
1       愛   女  80   60   75  90
2       誠   男  50   72   68  85
(以下何人も続くと思って下さい)

表示用シートは
出席番号 名前 性別 国語 算数 理科 社会 合計点 平均点
1
だけ入力してある状態で、
名前をデータ用から引っ張る→性別を(中略)→平均点を出す→次の行に移る→上の数字に1足した数字を入力→以下繰り返し
上記の操作を生徒のデータを全員分入力できたら(名前が空白セルになったら)終わりたいわけです

わかるでしょうか?
Do Whileさえうまく行けば入力自体はうまくいくことは確認済みです。
なお、上記のはやりたいことを単純化して一例で出したので、コピペしろとかそういうのはなしにしてくださいw
0229デフォルトの名無しさん2014/01/26(日) 00:38:45.97
>>225
別のシート.Cells(特定のセル.Row(), 特定のセル.Column()).Value
0230デフォルトの名無しさん2014/01/26(日) 00:39:26.01
別のシート.Cells(ActiveCell.Row(), ActiveCell.Column()).Value
0231デフォルトの名無しさん2014/01/26(日) 00:41:39.97
目的が平均と合計を出したいだけ
であればワークシート関数=average(,) =sum()

データシートの右端に加えればいいじゃない
表示用の見た目に書式を変えればいいじゃない
02322222014/01/26(日) 01:22:05.92
>>229-230
ありがとうございます!無事動作いたしました!

>>231
上記のは一例で、目的が他に色々あるし……w
0233デフォルトの名無しさん2014/01/26(日) 05:40:30.51
>>224
君にはまだ早いみたいだから無理するな
0234デフォルトの名無しさん2014/01/27(月) 20:41:31.77
今エクセルで作業をしてて、行き詰ってしまったんで助力お願いします

フォルダ内にある.CSVファイルの行数を一つずつ取得して、それを別のブック(開いていない)のC10とC12のセルに結果を貼り付けて
そのブックを新しい名前で特定のフォルダ内に保存したいです(保存ファイル名は行数を取得したファイルの名前&amp;_assにしたい)
それをフォルダ内にある.csvファイル全てに連続して処理をさせたいのですが、さすがに3000ファイルもあるとこれをしないと詰みそうです

途中までの作業はぐぐって何とかやってきましたが、ちょっとどんづまってます
よろしくお願いします
0235デフォルトの名無しさん2014/01/27(月) 21:20:37.26
>>234
Excelマクロ4.0を使えばブックは開かなくても済むかもね。
あと、CSVの行数取得はここに載ってた。
http://www.moug.net/tech/exvba/0060083.html
0236デフォルトの名無しさん2014/01/27(月) 21:20:39.30
Office TANAKAさんのページだけで完成させられるじゃないか
ここで質問するような形式のレスではないし、論外だと思います
0237デフォルトの名無しさん2014/01/27(月) 22:17:46.82
i = 1
kannsuu1 = Worksheets("Sheet1").Cells(i, 1)
kannsuu2 = Worksheets("Sheet1").Cells(i + 1, 1)

Do Until kannsuu1 <> kannsuu2

i = i + 1
kannsuu1 = Worksheets("Sheet1").Cells(i, 1)
kannsuu2 = Worksheets("Sheet1").Cells(i + 1, 1)

Loop

上記のようであれば完走するのですが i = i + 1 の下2行を削除すると動かなくなってしまいます
マクロの動きとしては Do Until でkannsuu1,2を呼び出すだけではダメで、必要であるごとにkannsuu1 =
などと一度呼びだしてiの値を反映させなければいけないのでしょうか?
多分ものすごく馬鹿なことを聞いてるのだと思いますが、さしつかえなければヒントだけでもご教示ください
0238デフォルトの名無しさん2014/01/27(月) 23:07:45.25
>>237
そのプログラムが正しいとすると、kannsuu1もkannsuu2も関数じゃなくて変数
名前をkannsuuにしても関数にはならない
0239デフォルトの名無しさん2014/01/28(火) 01:37:20.21
>>237
>>238の言うとおり、kannsuu1やkannsuu2はセルの値を入れる「変数」。
変数っていうのはプログラマの意図に反して勝手に中身の値が変わられると困る
(そもそもある値を一時的に保持しておく目的で変数というものが存在する)ので、
プログラム的に指示がない限り、勝手に中身が書き換わることは普通はない。

なのでそのコードは、A列のi行目と(i+1)行目のセルの値が一致する箇所を発見するまで
A列を上から下へ走査するという目的のコードであるなら、
間違いではない(最善ではないかも知れない)。

むしろ6、7行目を消そうとする理由が知りたい。
0240デフォルトの名無しさん2014/01/28(火) 01:54:30.04
>>237
i = 1
k1 = 0
k2 = 0
while k1 = k2
..k1 = cells(i+0,1)
..k2 = cells(i+1,1)
..i + 1
loop

または

i = 1
while cells(i+0,1) = cells(i+1,1)
..i + 1
loop
debug.print cells(i+0,1), cells(i+1,1)
0241デフォルトの名無しさん2014/02/04(火) 21:02:33.55
win 7 excel 2013なんですけど、
配列の数を取得するにはどうすればいいんでしょうか
UBoundって入力しても補完で出てこないし、
オブジェクトブラウザーで調べてみても存在していないんですが
0242デフォルトの名無しさん2014/02/04(火) 21:53:17.23
>>241
HELP参照するか、ググルと沢山有る
0243デフォルトの名無しさん2014/02/04(火) 22:49:10.29
教えてくれんのですか
ググり力を鍛えなければなぁ
0244デフォルトの名無しさん2014/02/05(水) 01:40:01.47
office2013のリファレンスみたけどUBoundはあった
でも、やっぱ俺の環境にはUBoundねーぞ
UCaseはあんのにどういうこっちゃ
0245デフォルトの名無しさん2014/02/05(水) 03:55:50.64
うちの2007でもUBound,LBoundは補完されないな
オブジェクトブラウザにもみつからない

でも普通に使えるしヘルプはF1で参照できる
WordやACCESSでも同じだったから、VBEの問題かもね
0246デフォルトの名無しさん2014/02/05(水) 05:28:39.22
2010でもUbound補完されない
けど気にせず入力しちゃえば普通に使える
0247デフォルトの名無しさん2014/02/05(水) 20:25:50.87
使えました!
補完出ないとかありえなくないですかw?
0248デフォルトの名無しさん2014/02/05(水) 20:37:29.17
ところで、VBA初めてなんですが、
Javaでいうリスナーを動的に設定するには何かいい方法ありますか?

text_ChangeAfter みたいなところに記述するのは、
数が増えると大変なので
エクセルテーブルにコンポーネントとそれに対する処理方法を記載しておいて、
例えば、郵便番号textには郵便番号処理(4桁目に-を挿入)をやらせるとかしたいです
0249デフォルトの名無しさん2014/02/05(水) 20:37:50.41
他にも補完が効かないものもあるからなぁ datediffとか
まだ他にもあるんかな
0250デフォルトの名無しさん2014/02/05(水) 20:57:01.65
>>246 UBoundは「関数」でなく「構文」だ。文字の色を見ろ。

>>248
Excelでコードを半自動生成すると捗る。
 Private Sub TextBox5_Change(): Call 処理8(TextBox5): End Sub
 Private Sub TextBox6_Change(): Call 処理3(TextBox6): End Sub
0251デフォルトの名無しさん2014/02/05(水) 21:16:07.29
>>250
大変興味深いです

でも、それはやっぱり
TextBox5_Changeメソッドに記述するという方法になってしまいますか?
0252デフォルトの名無しさん2014/02/05(水) 22:30:17.57
テキストボックスに入力した文字列をシート内から検索できるようなVBAをWEBで見つけました。

(テキスト入力→ボタンを押す→検索される)

Sub ボタン1_Click()
On Error GoTo エラー処理 '検索文字が見つからなかったときはエラー処理へジャンプ
Cells.Find(What:=TextBox1.Value, LookAt:=xlPart).Activate'シート全体を対象に検索
TextBox1.Value = "" 'テキストボックスの入力文字を消去
Exit Sub '検索文字が発見できた場合はここで終了
エラー処理:
MsgBox "見つかりませんでした"
TextBox1.Value = ""
End Sub

この場合、同じ文字列が複数有る場合、2つめ以降が検索できません。
2つめ以降を検索できるようにするにはどうすれば良いでしょうか?
0253デフォルトの名無しさん2014/02/05(水) 22:38:15.96
あまりオススメしないけど、
「WithEventsを使用してコントロールのイベントを受け取って、
 別オブジェクトのActionPerformedメソッド?を呼び出す」
クラスを作りまくる方法もある
0254デフォルトの名無しさん2014/02/05(水) 23:04:34.06
>>253
ありがとうございます
まさにそれらしい記事を発見いたしました
http://ateitexe.com/excelvba-control-change-event/

家にexcelがないのですが、会社で試してみたいと思います

それと、textboxのプロパティで郵便番号ならIMEを半角数字限定
住所なら全角ひらがなとか設定できたと思いますが
それをテンプレートとして保存するような機能はありますでしょうか?

プロパティのこことここを直して〜だと設定ミスが出るので、
テンプレから反映できたらなぁと
これもテーブルに定義してもいいのですが
0255デフォルトの名無しさん2014/02/06(木) 00:21:03.25
>>252
>Cells.Find(What:=TextBox1.Value, LookAt:=xlPart).Activate

どの位置から検索するかを引数に与えることができたはずだから、
変数を用意して位置情報を扱うように改造すれば、連続して検索出来るよ
その際、検索処理をWhile Loop内にするのが一般的だと思う
0256デフォルトの名無しさん2014/02/06(木) 00:23:20.25
>>254
VBAスレだから、その、作ればいいと思うよ
0257デフォルトの名無しさん2014/02/06(木) 01:01:49.69
>>250
すくなくとも、ヘルプにはUBound「関数」とかいてあるわけですが
入力補完はしないくせに、uboundと書くとちゃんとUBoundにしてくれるんだな
0258デフォルトの名無しさん2014/02/06(木) 01:30:45.07
>>250
msdnにもUBound Functionて書いてあるよ
http://msdn.microsoft.com/en-us/library/gg278658(v=office.14).aspx
0259デフォルトの名無しさん2014/02/06(木) 01:31:48.95
リンク失敗
http://msdn.microsoft.com/en-us/library/gg278658%28v=office.14%29.aspx
0260デフォルトの名無しさん2014/02/08(土) 01:24:05.94
Javaやってたから継承とかできないとかクソとか思ってたけど、
variantとかめっちゃ便利やった
0261デフォルトの名無しさん2014/02/08(土) 01:36:34.71
VBとかVBAはオブジェクト指向言語ではないが
オブジェクト指向言語のいいとこ取りはしてるってこと
0262デフォルトの名無しさん2014/02/09(日) 02:17:26.39
継承とかできないとかクソとか言ってる奴は、まだまだ「言語に使われてる」レベル

継承出にないよりは出来た方が良いって話なら当然のことだけど
出来ないなら出来ないなりに使いこなせる奴が、「言語を使ってる」奴だ
0263デフォルトの名無しさん2014/02/09(日) 05:10:14.13
とは言えやっぱり使えるにこしたことはないよ。
昔のアセンブラなんかは掛算や割算も自前でロジックを組まなければならない時も
あったけど、今そんなの嫌でしょ?
例えば配列の中の値をソートしたいとして、それが出来るメソッドが最初から有ったとき、
わざわざ自前で作る必要はないよね?
そのロジックの仕組みを知ってて使うのと、知らないで使うのも違うけど、
そのロジックの仕組みを知ってても、そう言った便利機能を使えるのと使えないのではやっぱり違うよ。
0264デフォルトの名無しさん2014/02/09(日) 10:56:14.31
>>262
> 継承とかできないとかクソとか言ってる奴



> 出来ないなら出来ないなりに使いこなせる奴

は、別に排他じゃないだろ。
バカなの?
0265デフォルトの名無しさん2014/02/09(日) 10:58:13.72
ソートも凝った条件付けようとしたら、結局自作になるから
組込機能頼りってのも、良いことばかりではないけどね

例えば
数値の1〜3と、英大文字のA〜Cと、英小文字のa〜cをソートした場合、Excelの並べ替えだと
「1,2,3,a,A,b,B,c,C」だが、
「1,2,3,A,B,C,a,b,c」にしたい場合や
「A,B,C,a,b,c,1,2,3」にしたい場合や
「1,2,3,a,b,c,A,B,C」にしたい場合とかもある

また数値だと
「7,8,9,40,50,60,100,200,300」だが、文字列数字だと
「100,200,300,40,50,60,7,8,9」になるので、文字列でも数値への変換無しに、
数値と同じ並べ替えをしたい場合や、逆に数値を文字列数字の順にしたい場合もある

便利なモノほど利用者をバカにすると言われてるわけで、
もちろん便利じゃないものを使いこなせる能力を持った上で、
便利なものを有効活用して工数を減らすのは良いが
便利なものに頼りきりになってしまうのも、問題と言えば問題だな
0266デフォルトの名無しさん2014/02/09(日) 13:59:41.61
>>265
大体は同意だけど、

>便利なモノほど利用者をバカにすると言われてるわけで、

これは少し違うと思う。
便利なものが有った場合、今度はそれをいかに有効活用するかということと、
自分で考えて作った方がいいかの選択肢が出てくる。
上のような例の場合、本来の項目を変えずに別項目を作って、
そこに前0で埋めたり、大文字変換した値を用意してソートすれば事足りる。
それもダメだというならそう言うLinqとラムダ式で組めばいい。
視点が変わるのと、出来ることが増えることによって夢がひろがりんぐになるわけだ。
0267デフォルトの名無しさん2014/02/09(日) 14:13:43.52
解ってないのか
0268デフォルトの名無しさん2014/02/09(日) 19:53:17.21
解らなくてもいい
理解しろ
0269デフォルトの名無しさん2014/02/10(月) 00:39:22.03
>>265
そう思うんなら中間言語使って頭鍛えなよ。
そんなのの成り立ち一々全部理解しなきゃいけないなら
VBAでだってまともに組めないよ。
0270デフォルトの名無しさん2014/02/10(月) 10:47:10.65
>>265
便利なものが人をバカにするんじゃなくて
便利なものに頼りきる人はもともとバカだっただけ
0271デフォルトの名無しさん2014/02/10(月) 15:31:20.21
>>265
それはExcelのソートのインターフェースが糞なだけ。
まともな言語ならラムダ式とかで比較を書ける。
クイックソートとかをいちいち真面目に実装するのは面倒だろ。
0272デフォルトの名無しさん2014/02/10(月) 17:52:51.32
20年前に仕様が固まったBasic言語に文句言う奴
0273デフォルトの名無しさん2014/02/10(月) 21:17:25.11
>>271
Javaってラムダ式あったっけ?
0274デフォルトの名無しさん2014/02/10(月) 22:12:34.15
>>273
Java8で導入とか何とか。
0275デフォルトの名無しさん2014/02/10(月) 22:59:24.35
>>272
Basicと言う観点から見れば仕様が固まるなんてことはないよ。
時代に合わせてる常に仕様は変わる。
VBAがたまたまVB6.0辺りの仕様で停滞してるだけ。
もっと前のN-Basic辺りは
Console 0,25,0,1とかおまじないのようにみんな付けてたけど、
VBAから入った人にしてみれば何のこっちゃってことになる。
0276デフォルトの名無しさん2014/02/11(火) 08:44:06.43
便利なことって言うより新しいことに頭がついていけないじじいなんだろ
0277デフォルトの名無しさん2014/02/11(火) 10:11:19.84
Excelでもバージョンアップのたびに関数がどんどん追加されてるけど
古いシステムでも修正なしで動くように新しい機能をわざと使わないことならある
0278デフォルトの名無しさん2014/02/11(火) 11:13:16.08
windows xpとoffice2003廃止に伴い、
もうバージョン違いに悩まないで良くなるのかなあ。
0279デフォルトの名無しさん2014/02/11(火) 12:02:07.37
古いのがなくなるのとバージョンアップは無関係だろ
これからもどんどん新機能が追加されてくに決まってる
0280デフォルトの名無しさん2014/02/11(火) 14:29:28.14
未だにOffice2000使ってますが、特に問題ないです。
0281デフォルトの名無しさん2014/02/11(火) 23:00:10.06
特定のセルに入力がないと空欄になるようにif関数が入力してあるんですが、
空欄のセルだけ非表示にできるようにはどうマクロを組めばよいのでしょうか。
数式が入っていなければ非表示にできるようには組めるのですが、
見た目上は空欄でもセルには数式が入力されているため上手くできません…。
どうかご教授ください。
0282デフォルトの名無しさん2014/02/11(火) 23:05:27.59
>>281
セルの非表示ってどうやってやってるの?
0283デフォルトの名無しさん2014/02/11(火) 23:41:26.34
>>282
セルではなく行の非表示でした。
例えばa1からa10に入力がない場合ですが、
If [Counta(a1:a10)] < 11 Then
Range("a1:a10").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
End If
で処理をしています。
ですがこれだと関数で空欄になっていてもセルには数式が入っているので、
非表示にはならないので困っています。
0284デフォルトの名無しさん2014/02/12(水) 07:33:54.19
>>283
ちょっと思い出せないけどxlCellTypeBlanks以外に何かなかったっけ?
ないなら判定を自分で作ればいいかと
0285デフォルトの名無しさん2014/02/12(水) 10:47:06.24
普通にValueとかTextプロパティを見ればいいだけでは
0286デフォルトの名無しさん2014/02/12(水) 12:30:57.75
>>283
For Each c In Range("a1:a10")
  If c.Text = "" Then Rows(c.Row).Hidden = True
Next
0287デフォルトの名無しさん2014/02/12(水) 14:37:20.00
CountBlankでいいんじゃないか
0288デフォルトの名無しさん2014/02/12(水) 14:40:01.25
>>286
それだと1個でも空白セルがあったら非表示になるんじゃ
0289デフォルトの名無しさん2014/02/12(水) 16:22:45.01
>>288
For Each でA1:A10内の各セルを一個ずつ選んで
そのセルのテキストが""だったらセルの行全部を削除する

これは>>283の要求どおりの動作だと思う
02902892014/02/12(水) 16:25:01.52
ごめん、書き間違えた
削除じゃなく非表示だった
0291デフォルトの名無しさん2014/02/12(水) 17:49:50.09
>>289
ああ、行単位でコントロールするのか
If [Counta(a1:a10)] < 11 Then しか見てなかったわ
0292デフォルトの名無しさん2014/02/12(水) 19:19:18.29
そもそも最初のIfって必要か?
1行も消さない場合のがよっぽど多くないと、このロジックだとむしろナノ秒単位で遅くなるだろ
02932832014/02/12(水) 19:43:37.89
>>286
このマクロで思った通りの処理をしてくれました、ありがとうございます。
ですが思ったよりも処理に時間がかかってしまうようです...。

レスを下さった方々ありがとうございます!
0294デフォルトの名無しさん2014/02/12(水) 19:47:46.74
>>293
まとめて処理すればいいよ
もらったコードに手を加えちゃダメってわけじゃないんでしょ?
0295デフォルトの名無しさん2014/02/12(水) 19:56:10.39
>>293
えっ調べるのはA列だけでいいの?だとしたら>>283のコードはなんだったのか…
遅いと感じるならScreenUpdatingを入れればたぶん一瞬で終わるよ
02962832014/02/12(水) 20:26:25.50
マクロを断片的に覚えているので質問や発言がチグハグになってしまい申し訳ありません…。
レスくださった方のものを参考にさせていただいて自分で再度考えてみます。

ご迷惑おかけしました、ROMに戻ります。
0297デフォルトの名無しさん2014/02/14(金) 03:55:36.59
エクセルは2000、VBAは6.0です。

ウェブの某サイトに自動ログインするマクロを作っています。
IDとパスワードはうまく入力させることができたのですが、
ログインができません。

ログインボタンが次のようなソースコードのサイトに
ログインするにはどうしたら良いでしょうか?


<input type="hidden" name="SsLoginPage" value="/members/" id="hidden1">
<input type="hidden" value=" ログイン " id="submit1" name="submit1">
<input type="image" src="../../ssl_img/login/btn_login.gif" alt="ログイン" tabindex="300" id=image1 name=image1>
0298デフォルトの名無しさん2014/02/14(金) 19:01:26.24
>>297
スレ違い
0299デフォルトの名無しさん2014/02/14(金) 21:24:22.54
>>297
できてるところまでソース貼って
0300デフォルトの名無しさん2014/02/14(金) 22:46:45.67
>>299
サイトは伏せさせてもらっていいでしょうか? ネットで調べて無理矢理作ったので洗練されてません。

Sub 自動ログイン()
Dim obj As Object

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate "https://《ログインしたいサイト》"
Do Until objIE.Busy = False
Do Until objIE.ReadyState = 4
Do Until objIE.Busy = False
DoEvents
Loop
Loop
Loop

CreateObject("WScript.Shell").AppActivate "《ログインしたいサイトのタイトル》"
Set objU = objIE.document.getElementsByName("SsLogonUser")
If objU.Length = 0 Then
MsgBox "ログインページが変わった?"
WScript.Quit
End If

objU(0).Value = "《ID番号はここ》"
Set objU = Nothing

objIE.document.getElementsByName("SsLogonPassword").Item(0).Value = "《パスワードはここ》"
Set objU = Nothing

'このあと、ログインできるようにしたいのですが…
End Sub
0301デフォルトの名無しさん2014/02/15(土) 11:58:56.47
質問です
ExcelシートにユーザフォームでDTPickerを貼り付けて、日付をこのカレンダーで
選択すると、フォームがある位置の陰になっているセルにこっそり日付格納して
マクロでその日付を使うように作成しました。
ところがこのカレンダーが動く人と動かない人がいて困っています。
(クリックしてもユーザフォームが固定された状態でカレンダーが表示されない)

環境はExcel2010で作成および表示
拡張子は会社の方針で互換重視のxls(関連会社とのファイル共有などのため)
どうもExcel2000でファイルを開くと動くというのも確認されていて、意味不明です。
インスコされている環境も社内標準環境なので、ランタイムが異なるなど無いはず
なんですが…

解決策の心当たりがあればよろしくお願いします。
0302デフォルトの名無しさん2014/02/15(土) 13:34:19.94
>>301
ここにアクセスがインストールされてないとどうたらとか
アクセスが無くてもVBランタイムが入ってれば動くけど
それをエクセルで使うのはライセンス違反がどうたらとか色々書いてある

http://www.h3.dion.ne.jp/~sakatsu/Excel_Tips06.htm
0303デフォルトの名無しさん2014/02/15(土) NY:AN:NY.AN
>>302
http://kojikoji75.hatenablog.com/entry/2013/08/17/175328
の Date and Time Picker Control を使っているのでライセンス等は大丈夫なはずです
よく見るとAxtiveXコントロールとあるので
http://www.ilovex.co.jp/blog/system/cat820/excelactivex.html
と同じ罠に引っかかってるかもです(症状が良く似ている印象)

とりあえず月曜会社で試してみますが、これで解決しなかったら本格的に分からないw
03043022014/02/15(土) 14:44:20.37
>>303
その Date and Time Picker Control てのは2007から実装されたんでしょ?
それだと>>301で言ってた「2000で動く」ってのはおかしくない?
03053012014/02/15(土) 15:10:33.32
>>302
言われてみると確かにおかしいですね
でも2kで「動いた」って目の前で見せられたので…

昨日発覚したばかりなので、月曜改めて周囲の状況も含め確認してきます。
0306デフォルトの名無しさん2014/02/15(土) 17:36:08.31
2000と2007って同時にインストールできるんじゃまいか
0307デフォルトの名無しさん2014/02/17(月) 21:49:42.74
質問です。長いので二つに分けて質問させてください
Sub 総計計算_送料()
Dim 行番号 As Currency
Dim 工場直送送料 As Currency
Dim 受注生産送料 As Currency
Dim 送料合計 As Currency
行番号 = 14
送料合計 = 0
工場直送送料 = 500
受注生産送料 = 800
Do Until Cells(行番号, 4) = ""
If Cells(行番号, 6) = "工場直送" Then
送料合計 = 送料合計 + 工場直送送料
ElseIf Cells(行番号, 6) = "受注生産" Then
送料合計 = 送料合計 + 受注生産送料
0308デフォルトの名無しさん2014/02/17(月) 21:54:21.14
上記のような構文の場合、
例えば
送料合計 = 送料合計 + 工場直送送料は
0 = 0 + 500
と、工場直送送料は「500」として計算されると思うのですが
Do Until Cells(行番号, 4) や If Cells(行番号, 6)といった式の場合
なぜいきなり(14 , 4)セルや(14 , 6)セルといったセルに飛ばずに、
ちゃんと一行目のセルから計算されるのかわかりません。
本当に初心者でアホな質問だと思うのですが、答えて欲しいです。
0309デフォルトの名無しさん2014/02/17(月) 22:18:32.41
>>307のプログラムが途中で切れてるから推測だけど単純な入力ミスしてる
0310デフォルトの名無しさん2014/02/17(月) 22:26:13.83
>>308
ステップ実行で1行ごとに各変数の値を確認してみたら?
0311デフォルトの名無しさん2014/02/18(火) 03:36:11.85
むしろ1行目から計算されているというのが勘違いじゃないのか
0312デフォルトの名無しさん2014/02/18(火) 07:28:15.08
行番号にCurrencyを使うな気持ち悪い
0313デフォルトの名無しさん2014/02/18(火) 11:22:50.43
タシカニ
0314デフォルトの名無しさん2014/02/18(火) 14:32:12.07
だな。
IntegerじゃないぞLong使えよ
03152972014/02/19(水) 01:25:10.63
>>300誰か分からないでしょうか…?
0316デフォルトの名無しさん2014/02/19(水) 12:30:10.58
>>315
残念ながらわかりません
ごめんなさい
0317デフォルトの名無しさん2014/02/19(水) 13:51:27.51
>>315
ログインボタンのクリックは
objIE.document.all.btn01.Click
みたいに書く
ページ内にクリックできる場所が複数ある時はボタン番号を適切に変える
「戻る」「入力内容をクリア」「IDをクッキーに保存」とか色々と並んでる場合があるからね

ていうか検索ぐらいしろよ
「VBA IE操作 クリック」みたいなキーワードでサンプルがいくらでも出てくるぞ
0318デフォルトの名無しさん2014/02/19(水) 21:09:16.21
=IFERROR(HYPERLINK(VLOOKUP(Cells(n1,5),$Q$2:$R$10,2,TRUE)),"")
上記を代入したいんですがうまくいきません。
n1は任意の変数です。Vlookupのところではねられます。

Worksheets("データシート").Cells(n1, 6).Formula = "=IfError(Hyperlink(VLookup(Cells(" & n1 & ", 5), $Q$:$R$10, 2, True)), "")"
考えてやってみましたがこれではダメっぽいです。
ご教授いただけると助かります。
0319デフォルトの名無しさん2014/02/19(水) 21:49:24.13
>>318
Worksheets("データシート").Cells(n1, 6).Formula = "=IfError(Hyperlink(VLookup(Cells(" & n1 & ", 5), $Q$:$R$10, 2, True)), """")"

とりあえずこんな感じ?
03203192014/02/19(水) 21:52:23.42
>>318
ダブルクォーテーションをダブルクォーテーションで囲んだ中で使うときは
"" と2個続けるっていうルールになってるよ
0321デフォルトの名無しさん2014/02/19(水) 21:58:31.80
>>318
Worksheets("データシート").Cells(n1, 6).Formula = "=IfError(Hyperlink(VLookup(Cells(" & n1 & ", 5), $Q$2:$R$10, 2, True)), """")"
0322デフォルトの名無しさん2014/02/20(木) 00:46:24.24
>>317
それで番号をひと通り押してみたんですけど
どれもダメでした
>>297のソースコードでもボタン形式でいいのでしょうか?

>>316
丁寧にありがとうございます
■ このスレッドは過去ログ倉庫に格納されています