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

Excel VBA 質問スレ Part19

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2011/05/19(木) 06:35:55.82
01 http://pc11.2ch.net/test/read.cgi/tech/1054356121/
02 http://pc11.2ch.net/test/read.cgi/tech/1168308855/
03 http://pc11.2ch.net/test/read.cgi/tech/1180192018/
04 http://pc11.2ch.net/test/read.cgi/tech/1189814602/
05 http://pc11.2ch.net/test/read.cgi/tech/1197448064/
06 http://pc11.2ch.net/test/read.cgi/tech/1205231499/
07 http://pc11.2ch.net/test/read.cgi/tech/1212587819/
08 http://pc11.2ch.net/test/read.cgi/tech/1219673793/
09 http://pc11.2ch.net/test/read.cgi/tech/1228372971/
10 http://pc12.2ch.net/test/read.cgi/tech/1235332603/
11 http://pc12.2ch.net/test/read.cgi/tech/1241885130/
12 http://pc12.2ch.net/test/read.cgi/tech/1247566074/
13 http://pc12.2ch.net/test/read.cgi/tech/1254281104/
14 http://pc12.2ch.net/test/read.cgi/tech/1262748898/
15 http://pc12.2ch.net/test/read.cgi/tech/1271261239/
16 http://hibari.2ch.net/test/read.cgi/tech/1280045912/
17 http://hibari.2ch.net/test/read.cgi/tech/1289182437/

前スレ:
Excel VBA 質問スレ Part18
http://hibari.2ch.net/test/read.cgi/tech/1298240666/

0002デフォルトの名無しさん2011/05/19(木) 06:37:40.54
ExcelのVBAに関する質問スレです

★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。

★2 ExcelのVBA以外の部分に関する質問はNGです。
   但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。

★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。

 VBAとは、『Visual Basic for Application』の略で
  Application
  ├Workbooks
  |└Workbook
  |  ├Worksheets
  |  |└Worksheet
 というApplication以下のオブジェクトを、VB言語で操作するものを指します。
 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。

★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。

★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。

★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
0003デフォルトの名無しさん2011/05/19(木) 09:09:18.28
>1,2 乙
0004デフォルトの名無しさん2011/05/19(木) 10:09:31.25
おっつ
0005デフォルトの名無しさん2011/05/19(木) 16:40:20.76
Cells(1+i, 1) = "=COUNT(B1:H1)"

のような形でfor文で回して各行の合計をそれぞれ表示させたいのですが
B1:H1の部分を足していく(B2:H2、B3:H3…)
のようにするにはどうすればいいのでしょうか?
0006デフォルトの名無しさん2011/05/19(木) 17:20:01.87
Cells(1+i, 1) = "=COUNT(B" &1+i & ":H" & 1+i & ")"
0007デフォルトの名無しさん2011/05/19(木) 17:35:11.40
そんなのに応えるなよw
0008デフォルトの名無しさん2011/05/19(木) 18:39:40.63
vbaのコードをカラー印刷する方法ってある?
MS XPS Document Writerを使っても白黒にしかならないんだけど。

VB2008ならMS XPS Document Writerでカラー印刷できるのに、
VBAはなんでカラー印刷にならないんだろうか?
0009初心者です2011/05/19(木) 20:32:24.73
質問させてください

A5からH1000程度のデータ表があります。
このプログラムを実行すると、構文エラーがでてきます。
Loop Until Cells(gyou, retu) = "" にカーソル位置が来て。LOOPに対応するDoがありませんと表示されます。

Sub サイコロ()
Dim ymaru As Integer, imaru As Integer
Dim gyou As Integer, retu As Integer
ymaru = 0
imaru = 0
gyou = 6
retu = 8

0010初心者です2011/05/19(木) 20:33:40.06
続きです。

Do
If Cells(gyou, retu) = "○" Then
ymaru = ymaru + 1
imaru = 0
If ymaru >= 3 Then
Call 連同初買引売
Else
ymaru = 0
imaru = imaru + 1
If imaru >= 3 Then
Call 連同初売引買
End If
gyou = gyou + 1
Loop Until Cells(gyou, retu) = ""
End Sub

0011初心者です2011/05/19(木) 20:34:00.92
続きです

'サイコロ 連日同一サイコロ 初値買い〜当日引値売り
Sub 連同初買引売()
Cells(gyou, retu).Offset(0, -6).Copy
Cells(gyou, retu).Offset(0, 7).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

Sub 連同初売引買()
Cells(gyou, retu).Offset(0, -6).Copy
Cells(gyou, retu).Offset(0, 8).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

一体、Donosysoriのどこが間違っているのでしょうか?
あと、サブルーチンのcellsの使用法は間違っていませんか?
0012デフォルトの名無しさん2011/05/19(木) 20:44:12.79
end IFの数を数えたことがあるか?
0013デフォルトの名無しさん2011/05/19(木) 20:54:29.56
インデントとか適当なんだろうなあ
0014デフォルトの名無しさん2011/05/19(木) 20:58:45.19
>>8
実は俺もコードをカラー印刷する方法を知りたい。
誰か教えて。
0015デフォルトの名無しさん2011/05/20(金) 00:04:30.61
まず服を脱ぎます
0016デフォルトの名無しさん2011/05/20(金) 03:56:03.69
ソースをVisualStudioにコピペして印刷
0017デフォルトの名無しさん2011/05/20(金) 04:00:23.88
>>9
Ifが3つあるのにEnd Ifが1つしかない
変数gyouとretuの内容が下のSubに伝わっていない
00188=14 実は同一人物ですw2011/05/20(金) 09:59:30.88
>>16
うまくいきました。ありがとうございます。
16さんもやってますか?

しかし、XPS Document Writerは
いちいち上にパス名が表示されてうざいのですが、
これを全く表示しない方法ってある?
16さんのような使い手ならご存知かと。。。
0019デフォルトの名無しさん2011/05/20(金) 10:52:03.99
>>6
ありがとうございます、うまくいきました!
0020デフォルトの名無しさん2011/05/20(金) 14:17:20.63
【問題】以下は、コマンドボタンを押した時に選択されているセルの中央に横線を引くプロシージャである。�@、�Aにあてはまるコードは何か書け。

Private Sub CommandButto1_Click()

Dim myLeft1 as long
Dim myTop1 as Long
Dim myWidth1 as Long
Dim Target1 as Range

�@

myLeft1 = Target1.Left
myTop1 =Target1.Top + Target1.Height / 2
myWidth1 = Target1.Width + Target1.Left

Set MyLine1 = �A

End Sub
0021デフォルトの名無しさん2011/05/20(金) 14:56:37.69
�@set〜
�A〜addline〜
0022デフォルトの名無しさん2011/05/20(金) 16:17:49.65
なぁ、いつからここはVBAのドリルを解くスレになったんだ?なんて突っ込まないから、
もう少し解いて面白い問題出してくれよ。
0023デフォルトの名無しさん2011/05/20(金) 19:02:36.23
>>22
お前のためのスレです
0024デフォルトの名無しさん2011/05/21(土) 12:11:23.03
ユーザーフォームのコマンドボタンの形を四角ではなく、矢印や丸などに変えたいのですが、どなたかやり方を教えて頂けないでしょうか?
よろしくお願いします。
0025デフォルトの名無しさん2011/05/21(土) 12:31:21.42
>>24
VB6と同じやり方で
0026デフォルトの名無しさん2011/05/21(土) 12:33:40.94
>>25
やってみろや
0027デフォルトの名無しさん2011/05/21(土) 13:58:52.29
>>24
Excelの機能でボタンの形を変えるのは無理
丸とか矢印の画像をボタンかイメージか何かのコントロールに貼り付ける
0028デフォルトの名無しさん2011/05/21(土) 17:40:04.28
ある特定範囲内の列の文字をSplit関数で文字分割したいんだが
区切り文字がないセルになるとエラーが出てそこで止まってしまう。解決方法あったら教えて下さい


例
  A
1 1/2
2 1/3
3 1/4
4 5
5 1/6


Sub split()

Dim i As Integer, tmp As Variant

For i = 1 To 5
    tmp = Split(Cells(i, 1), "/")
    Cells(i, 1) = hp(1)
Next i

End Sub


この場合、i=4のところで処理が止まってしまいます。
0029デフォルトの名無しさん2011/05/21(土) 17:46:27.32
セルの文字数が0以上判定
文字列内部に/があり、かつ前後に文字列が少なくとも1つあることを判定
条件達成で処理
0030デフォルトの名無しさん2011/05/21(土) 17:55:26.00
>>29
ありがとう
ちなみに内部に"/"の判定だけでよくて、前後の文字は関係なかったです
0031修行の身2011/05/21(土) 20:31:24.67
誰かマクロを教えてくださいm(_ _)m
・シート1の『〔○曜日〕』から『 /他』まで、といった感じで各曜日の文章を1セルにまとめ、シート2に出力したい。ただし各週文章数はランダムのためそれに対応できるのが良いです。
・A1の文字列から日付を抽出してシート2に出力したい。
-----シート1-----
  A
1 5月9日(月)〜5月13日(金)
2 "〔月曜日〕"
3 "●文章1"
4 "●文章2"
5 "●文章3"
6 " /他"
・・・
----------
シート1の情報をシート2に以下のように出力したいです。
-----シート2(別シート)-----
  A    B
1 5/9   "〔月曜日〕●文章1●文章2●文章3 /他"
2 5/10  "〔火曜日〕●文章1●文章2 /他"
・・・
5 5/13  "〔金曜日〕●文章1 /他"
----------
0032デフォルトの名無しさん2011/05/21(土) 20:48:13.19
とりあえず
>>2のテンプレ★5を読んでこい

やってみたなら
できたとこまででいいからコード晒しとけ
0033デフォルトの名無しさん2011/05/21(土) 20:54:58.23
めっちゃ簡単だから、スレルール違反だろうと教えたがり君が喜々として語り出すかもw
0034デフォルトの名無しさん2011/05/21(土) 21:20:34.80
>>33
スレルールを述べよ
0035デフォルトの名無しさん2011/05/21(土) 21:24:45.12
英語のWeb辞書ページのHTMLからソースを抜き出して
複数の単語の意味を並べたHTMLを作ろうとしています。

ほぼできたのですが、ファイル出力すると発音記号が
「?」に変わってしまいます。

一旦単語ごとにセルに出力していますが、たとえばassureでは、
セルではきちん「əˈʃʊə」「əʃɔː」となっており、
そこからメモ帳に手動コピペしても「əˈʃʊə」「əʃɔː」となります。
しかしVBAで出力すると「????」です。

なにか対策はありますでしょうか。
0036デフォルトの名無しさん2011/05/21(土) 21:35:57.45
>>35
unicode
0037デフォルトの名無しさん2011/05/21(土) 22:21:39.12
>>36
ありがとうございます。できました。
発音記号に気づく前に改行が文字化けすることに気づいて、
削除したりいろいろしてましたが無駄でしたorz

今日はじめてVBA(というか組み込みC以外)のプログラムを触りましたが、
やれることも手段も多すぎて疲れました…面白いですがw
0038デフォルトの名無しさん2011/05/21(土) 22:30:49.33
MSに文句言っとけ
0039デフォルトの名無しさん2011/05/21(土) 22:37:40.72
>>34
★1 OSとExcelのバージョンくらい書け
★2 VBA使わないExcelの質問禁止
★3 VBAでExcel本体を操作する用途以外はスレ違い
★4 同上
★5 丸投げお断り
★6 わからなければマクロの記録試せ
0040デフォルトの名無しさん2011/05/21(土) 22:54:05.46
【問題】以下は、コマンドボタンを押した時に選択されているセルの中央に横線を引くプロシージャである。【�@】【�A】にあてはまるコードは何か書け。

Private Sub CommandButto1_Click()

Dim myLeft1 as long
Dim myTop1 as Long
Dim myWidth1 as Long
Dim Target1 as Range

【 �@ 】

myLeft1 = Target1.Left
myTop1 =Target1.Top + Target1.Height / 2
myWidth1 = Target1.Width + Target1.Left

Set MyLine1 =【 �A 】


End Sub
0041デフォルトの名無しさん2011/05/21(土) 22:55:32.13
�@set〜
�A〜addline〜
0042デフォルトの名無しさん2011/05/21(土) 23:41:02.65
〜 とは何だよ?正しく書きましょう
0043デフォルトの名無しさん2011/05/22(日) 00:02:24.90
�@set 以下略
�A前略 addline 以下略
0044デフォルトの名無しさん2011/05/22(日) 00:08:18.48
略したとこがどうしてもわかりません。教えてください。ずっとわかりません
0045デフォルトの名無しさん2011/05/22(日) 00:21:42.79
つーかさ、この問題文だと
Set MyLine1
する必要無いよなw

MyLine1の変数宣言がこのプロシージャ内に無いのを見ると
モジュールレベルで宣言されていて別の処理で使うのだろうが
問題として適切じゃないねw
0046デフォルトの名無しさん2011/05/22(日) 01:20:57.00
どうやったら早くプログラム組めるようになる?
それともやっぱり早さよりも正確さの方が重要かな?
0047デフォルトの名無しさん2011/05/22(日) 04:03:36.57
以下はセルに円を描画するマクロ ???に入る式を答えよ

Sub en(tx, ty, hankei) '中心X 中心Y 半径
Dim a, b, c, d, e, f, g, z
a = hankei ^ 2
b = hankei
c = 0
Do
If b > 0 Then
d = -1
Else
d = 1
End If
If c > 0 Then
e = 1
Else
e = -1
End If
f = Abs(b ^ 2 + (c + d) ^ 2 - a)
g = ???
If f > g Then
b = b + e
Else
c = c + d
End If
Cells(c + ty, b + tx).Interior.Color = 0
If c = 0 And e = 1 Then Exit Sub
Loop
End Sub
0048デフォルトの名無しさん2011/05/22(日) 05:02:07.07
ヘボコード読むより、1から作った方が早くて速いんだが
あえて答えるとbとc入れ替えてdをeに

因みに、正しくは「セルの塗りつぶしで円を表現する」な
0049デフォルトの名無しさん2011/05/22(日) 09:03:41.76
エクセルのVBAでマクロを作ったのですが、2003で作って動作確認して、
2010で動かしてみようとしたのですが、最初の立ち上がった時にいろいろ仕込んだメッセージが出た後に、
画面が灰色になり強制終了されているようです。
理由が分かりません。誰か分かりませんか?
0050デフォルトの名無しさん2011/05/22(日) 09:13:39.59
まずはうp
0051デフォルトの名無しさん2011/05/22(日) 09:15:54.87
>>50 えー何を?
0052デフォルトの名無しさん2011/05/22(日) 09:40:00.26
問題がおきるブック

うpしたくないとか、うpできないとか言うなら、さようなら
0053デフォルトの名無しさん2011/05/22(日) 09:42:09.83
問3 一からコード書いてセルの塗りつぶしで楕円を表現しなさい
26行以内 時間無制限
0054デフォルトの名無しさん2011/05/22(日) 09:42:19.66
>>52 えーごめんなさい。会社のデータもちょっとかんでるのでうpできないです。
0055デフォルトの名無しさん2011/05/22(日) 12:30:57.35
>>49ですが、自己解決しました。ありなっとー。
0056デフォルトの名無しさん2011/05/22(日) 13:05:23.59
>>47
問題がおかしいけど、たぶん出題者の意図としては

g = Abs(c ^ 2 + (b + e) ^ 2 - a)

>>53 そもそも提示されたソースだけでは>>47が楕円になるし、いくらなんでも26行は長杉
0057デフォルトの名無しさん2011/05/22(日) 16:06:27.34
>>56
> g = Abs(c ^ 2 + (b + e) ^ 2 - a)
その解答は、既に>>48が書いてるじゃん

f = Abs(b ^ 2 + (c + d) ^ 2 - a)
g = Abs(c ^ 2 + (b + e) ^ 2 - a)
> bとc入れ替えてdをeに
0058デフォルトの名無しさん2011/05/22(日) 17:07:10.83
>>46
お前は早く作ると不正確なコードになるのか?
だとしたら意味ねー。
0059デフォルトの名無しさん2011/05/22(日) 22:02:28.94
>>58
残念ながらちょっと複雑なコードになってくると
雑になるんだな。
やっぱ正確さは前提だよな。
じっくりすることにするわ
0060デフォルトの名無しさん2011/05/23(月) 00:06:34.87
>>59
動作の精査が取れた使い回しの効く部分は、
部品化しておいて、機能やカテゴリごとに標準モジュールやクラスに纏めておくと、
その部分は速く正確に作れるよ。
特に同じ様なものを複数作る時はフォーマットになるスケルトンを先に作ってからやると最終的には速く作れるわさ。
006116才♀ 2011/05/23(月) 07:41:28.04
16才♀ですが・・僭越ながら問題出しますっ!!><

問題:
セルに「さやか」と入力すると
・新規シート作成
・そのシート以外の全てのシート削除
・ブック保存
・ブック閉じる
以上を警告メッセージなしで行うプロシージャを絶対作成しなさい><
0062デフォルトの名無しさん2011/05/23(月) 08:14:31.84
ネコマタか……
0063デフォルトの名無しさん2011/05/23(月) 08:17:32.29
面白いと思ってるのか?
0064デフォルトの名無しさん2011/05/23(月) 08:34:40.33
>>61
髪型がツインテールなら考える
0065デフォルトの名無しさん2011/05/23(月) 08:41:01.31
>>61
なんか悪意的仕様にしか見えない。
0066デフォルトの名無しさん2011/05/23(月) 08:50:32.67
そこまでしなくてもパソコンの電源OFFでいいじゃん
0067デフォルトの名無しさん2011/05/23(月) 14:34:40.30
セルに「さだこ」と入力すると
・新規シート作成
・ry
0068デフォルトの名無しさん2011/05/23(月) 16:11:01.63
>>61
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If (Target.Cells = "さやか") Then
Application.DisplayAlerts = False
Worksheets.Add after:=Worksheets(Worksheets.Count)
For i = 1 To Worksheets.Count - 1
Worksheets(1).Delete
Next
ThisWorkbook.Save
ThisWorkbook.Close
End If
End Sub
0069デフォルトの名無しさん2011/05/23(月) 18:00:10.05
>>68
シェアウェアの期限が切れたら自動的に消滅しますみたいなコードだよな
0070デフォルトの名無しさん2011/05/23(月) 21:00:16.51
さらにパスつきで保存するとよい
まあ簡単に破れるけどね
0071デフォルトの名無しさん2011/05/23(月) 21:59:18.05
>>60
おk
つまりは今までのコードを見直して整理して
使いまわしできそうなものはガンガン使いまわしていくのが
早道ってことだな
がんばるぜぃ!!
0072デフォルトの名無しさん2011/05/23(月) 22:18:04.33
VBAの標準モジュールやクラスモジュールを
エクスポートして管理してる人って少なそう

VB6始め、一般の言語では超基本的なことなのにな

この間、VBEのプロジェクトエクスプローラに、D&Dでモジュールインポートしたら
VBA10年以上使ってるっていう上司に驚かれて、それ知らないことにこっちが驚いた
エクスポートだってD&Dで出来るのに、コピペでの使いまわしはしても
D&Dどころか、メニューからのインポート、エクスポートすらしたこと無いとか言われたよ
0073デフォルトの名無しさん2011/05/23(月) 22:28:09.38
モジュール削除しようとしたらエクスポートするか聞いてくるだろ
知らない人なんていないだろ10年もやってんなら
0074デフォルトの名無しさん2011/05/23(月) 22:38:10.58
いやつかわんだろエクスポートとインポート
0075デフォルトの名無しさん2011/05/23(月) 23:04:06.39
>>73
VBA10年の彼がエクスポートを知らなかったとは書いてないよ

彼が『知らなかった』のはD&Dでのエクスポート、インポート
普通のエクスポート、インポートは『やったこと無い』だけで知ってはいたよ
0076デフォルトの名無しさん2011/05/23(月) 23:43:31.08
>>75
エクスポート/インポートしたことないんなら D&D でできること知らなくても
当たり前だと思うが。

> VB6始め、一般の言語では超基本的なことなのにな

そもそも VBA 以外の言語は大抵わざわざエクスポート/インポートせずに普通
に管理できる。もちろん VB6 も。
0077デフォルトの名無しさん2011/05/23(月) 23:44:24.39
>>72
何を持って一般的な言語と定義するか分からないから何とも言えないけど、
VisualStudio系のは標準モジュールやクラスモジュールは作成した時にすでにファイルとして存在するから、
取り込む時には「新しい項目の追加」で「既存の項目」を選択して取り込むので、
インポート、エクスポート機能はむしろVBA特有の機能だと思ったけど。
JAVAとかは知らない。何か言語の問題って言うよりフレームワークの問題って気もするし。
0078デフォルトの名無しさん2011/05/24(火) 00:00:53.53
基本的だと言ってるのは独立したファイルとして管理して使い回すことじゃないの?
0079デフォルトの名無しさん2011/05/24(火) 00:26:41.37
そこは>>72がすっ飛ばして書いているからその通りなのか他の言語でもエクスポートするもんだと思って書いたのかは
伝わらない。
しかしすでに二人エクスポートするもんだと思って書いたと判断した人が出たのは確か。
0080デフォルトの名無しさん2011/05/24(火) 00:31:55.57
> VBAの標準モジュールやクラスモジュールを
> エクスポートして管理してる人って少なそう
0081デフォルトの名無しさん2011/05/24(火) 00:39:21.87
一人
0082デフォルトの名無しさん2011/05/24(火) 01:02:41.91
>>78
その通りです。

>>79
確かに書き方に不備があったかもしれませんね。

多くの言語で、逐一エクスポート的な操作をしなくてもファイルとして存在するのは周知の事実で
インポート的な操作手順や機能・項目名などの多少の違いくらい補完してくれるだろうと思って
端折りすぎてしまいました。
0083デフォルトの名無しさん2011/05/24(火) 06:08:38.91
???の部分を察して埋めなさい(7点)

Function irekae(a)
Dim b(), c, d, e
c = UBound(a, 1)
d = UBound(a, 2)
???
For e = 0 To c
For f = 0 To d
b(f, e) = a(e, f)
Next
Next
irekae = b
End Function
0084デフォルトの名無しさん2011/05/24(火) 06:42:27.95
Exit Sub
0085デフォルトの名無しさん2011/05/24(火) 06:49:37.16
Redim b(d,c)って言いたいんだろうが変数fの宣言も抜けてる
ちなみにExcel VBAじゃ1オリジンの配列もよく使う
Transposeを使わないのは正解ではある
0086デフォルトの名無しさん2011/05/24(火) 07:04:15.58
え?正解は
Dim f
だろ?
0087デフォルトの名無しさん2011/05/24(火) 07:34:19.69
>>86
不正解
0088デフォルトの名無しさん2011/05/24(火) 07:48:40.98
いい加減、ウザいよ
出題のレベルも低すぎな上に穴ありすぎだし
0089デフォルトの名無しさん2011/05/24(火) 07:58:13.32
嫌だなみんな
出題者の意図は察して埋めろと言う事だから動く動かないより
こんなしょぼいコードで偉そうに出題してすみません的なコメントが入るのが
一番しっくり来るだろ?
0090デフォルトの名無しさん2011/05/24(火) 08:07:52.20
出題のレベルが低すぎるのは確かだな
ちなみに>>87は>>83じゃない。
0091デフォルトの名無しさん2011/05/24(火) 21:57:51.81
一行とは書いてない
つまり、低劣なコードに見えてこれを破綻のない至上なるコードへと書き換えなければならないのだ
0092デフォルトの名無しさん2011/05/24(火) 21:59:57.69
途中でexitで抜ければいいだけ
0093デフォルトの名無しさん2011/05/24(火) 22:02:23.66
return false
だろJK
0094デフォルトの名無しさん2011/05/25(水) 00:12:20.44
maxCell = Range("A1").End(xlDown).Row
でA列の一番の下の文字列の位置を取得しますが、
本当にそれより下の列には最後まで何も入力されていないかどうかをチェックするにはどうすればいいのでしょうか?

if(maxCell == Range("A10000").End(xlUp).Row)
という方法が思いつきますが、これがベターと言えるのでしょうか?

0095デフォルトの名無しさん2011/05/25(水) 00:18:42.57
countaで。
0096デフォルトの名無しさん2011/05/25(水) 02:03:37.50
>>94
1行目の式と比較すればベターだけどベストじゃない
最大行数はExcelのバージョンによって違うから、最終行はいちいち求めた方が汎用性が高い
maxCell = Range("A" & Rows.Count).End(xlUp).Row

ただしこれでも完璧じゃない
0097デフォルトの名無しさん2011/05/25(水) 02:53:11.75
>>53
傾いた楕円 じゃね

これのレーンのとこで使ってるぜ
http://xlsg.net/cgi-bin/updown2/updown2.cgi?mode=download&id=339
0098デフォルトの名無しさん2011/05/25(水) 04:05:11.00
× maxCell = Range("A" & Rows.Count).End(xlUp).Row
○ maxCell = Cells(Rows.Count, 1).End(xlUp).Row

0099デフォルトの名無しさん2011/05/25(水) 06:51:36.01
>>96は俺じゃないが、どっちでも同じだよ。
アホかまったく。
前者はピリオド打った時入力候補が出るメリットがある。
0100デフォルトの名無しさん2011/05/25(水) 07:11:45.12
かなり複雑な構成のブックで1億回ぐらい実行することを想定してるんだよ
たぶん
0101デフォルトの名無しさん2011/05/25(水) 07:44:09.70
後、End(xlUp).Rowを使うなら先に最終行に何も入っていない事を確認しないとね。
0102デフォルトの名無しさん2011/05/25(水) 07:58:15.49
> >>96は俺じゃないが
0103デフォルトの名無しさん2011/05/25(水) 09:05:21.45
>>83は
irekae = WorksheetFunction.Transpose(a):ExitFunctionとでも引っかけたつもりが、>>85にTransposeに言及されて黙ってしまったのか?
0104デフォルトの名無しさん2011/05/25(水) 10:37:26.02
>>101
それもあるけど、それでもまだ完璧じゃない
0105デフォルトの名無しさん2011/05/25(水) 10:58:25.13
完璧じゃない
完璧じゃない

なんで口先だけで、コードを示さないの?
0106デフォルトの名無しさん2011/05/25(水) 11:01:53.87
㋙㋪゚㋬゚㋢゙㋖㋤㋑
   ●█▀█▄
0107デフォルトの名無しさん2011/05/25(水) 11:06:42.99
オートフィルターでも考慮してるんだろ?
フィルタリングされてるとすっ飛ばすからな。
いずれにしても完璧なコーディングできるやつなんて滅多にいねーよ。
掲示板の回答で細々と書くやつはアホだ。
0108デフォルトの名無しさん2011/05/25(水) 11:09:53.50
1つもデータがない場合ってのもあるな
xlUpの結果が1行目だった場合、先頭行にデータが入ってるかどうかも確認しないと
0109デフォルトの名無しさん2011/05/25(水) 11:12:10.91
もっと簡単にできるけどなあ
0110デフォルトの名無しさん2011/05/25(水) 11:16:41.91
>>108
先頭行にはタイトルがあるのが常識だからそれは考えなくていいだろ?
Findメソッドでもできるけど、一般的じゃねーな。
0111デフォルトの名無しさん2011/05/25(水) 11:23:12.15
おおかた完璧じゃないって言ってるやつはFindメソッドのこと言ってるんだろうな。
オートフィルター対策でFindメソッドなんて、もともとフィルターがかかってるなら仕方がない部分もあるが
VBAでオートフィルターはかけてはいかん。
0112デフォルトの名無しさん2011/05/25(水) 11:28:40.56
>>110
常識?なんだそりゃ
0113デフォルトの名無しさん2011/05/25(水) 11:29:55.19
>>112は先頭行にタイトル書かないのか?
馬鹿じゃね?
0114デフォルトの名無しさん2011/05/25(水) 11:37:38.47
112じゃないけど、人が見たり印刷したりするものには一番上にタイトル入れるけど
VBAで読み書きするだけのデータシートにはタイトル書かないことも多い
VBA側にタイトルに相当するもの(定数、列挙体)があれば完全に事足りるからな
0115デフォルトの名無しさん2011/05/25(水) 11:46:17.72
先頭行の見出しは普通だが、A2からA列最終行までのときA2にデータがあるかどうかのチェックが必要なケースはあるよな。
For i = 2 To 最終行なんて下手な書き方なら偶々対策はされてるが。
0116デフォルトの名無しさん2011/05/25(水) 12:03:21.08
xlUpの話だろ馬鹿か?
0117デフォルトの名無しさん2011/05/25(水) 12:05:17.32
↑意味不明
0118デフォルトの名無しさん2011/05/25(水) 12:08:52.33
>>117
学校行け餓鬼
0119デフォルトの名無しさん2011/05/25(水) 12:11:15.61
どうしたの?ボク
彼女にふられたの?
0120デフォルトの名無しさん2011/05/25(水) 12:15:31.94
>>117
0121デフォルトの名無しさん2011/05/25(水) 12:19:58.86
>>112
http://www.sonoworld.com/images/FetusItemImages/article-images/multiple_gestations/dupl-incompl_zouiten_files/siamois5.jpg
http://sonoworld.com/images/FetusItemImages/article-images/Multiple_gestations/conj_twins_rios/ima7.jpg
http://www.sonoworld.com/images/FetusItemImages/article-images/Syndromes/OEIS_Contarin/9.jpg
http://www.sonoworld.com/images/FetusItemImages/article-images/Syndromes/OEIS_Contarin/10.jpg
0122デフォルトの名無しさん2011/05/25(水) 12:23:24.22
もしもしは死ねよ
0123デフォルトの名無しさん2011/05/25(水) 12:49:09.87
>>119
煽りが足りない
0124デフォルトの名無しさん2011/05/25(水) 13:35:43.08
ヴァカの相手は程々にしないとな。
>>115はxlUpの話だよなぁ。
0125デフォルトの名無しさん2011/05/25(水) 15:54:12.02
㋙㋪゚㋬゚㋢゙㋖㋤㋑
   ●█▀█▄
0126デフォルトの名無しさん2011/05/25(水) 16:27:26.54
セルに入ってるのがタイトルかデータかなんて自動判別するのは不可能
ここで回答するのは無理
自分で作り分けるしかない
0127デフォルトの名無しさん2011/05/25(水) 16:51:28.98
i=appliaation.rows.count
do until cells(i,1)〈〉゙゙
i=i-1
loop
みたいなのもう出た?
0128デフォルトの名無しさん2011/05/25(水) 20:52:35.47
>>126
そういう話じゃないと思うなぁ。
A2以下にデータがないとき、Range("A65536")End(xlUp).Rowは1になるが
行番号1のA1が空白か空白じゃないかって話だろ?
0129デフォルトの名無しさん2011/05/25(水) 22:06:41.51
見出し部分は別に無ければいけないもんじゃ無いし、
有ったとしても1行だけとは限らない。
どっちにしてもデータの最上部に対して何らかの仕組みを作っておかないと、
最上部に1件データが有ったとしても0件と見なしてみたり、
データ開始行より上の行をデータ最終行と見なしたりする。
だから考慮しなくていいと言うもんでもないと思う。
0130デフォルトの名無しさん2011/05/25(水) 23:15:44.60
データ開始行より上の行をデータ最終行と見なしたりするのは>>115に出てるな。
この仕組みが何年たっても「大和の吊るし柿」でへたなりに固まってるやつ見るけどw
0131デフォルトの名無しさん2011/05/26(木) 00:51:04.54
>>129
>最上部に1件データが有ったとしても0件と見なしてみたり、
>データ開始行より上の行をデータ最終行と見なしたりする。
下は俺もやっとわかったが、上がどうも想像がつかない。
たとえばどういうとき?
0132じゃが山さん2011/05/26(木) 02:50:51.29
〜問題〜
いろいろとエスパーして???を埋めなさい(15点)

Sub tyokusen(sx, sy, ex, ey)
Dim a, b, c, d, e, f, g, z
f = 1
If sx > ex Then f = -1
g = 1
If sy > ey Then g = -1
a = sx
b = sy
If Abs(ex - sx) < Abs(ey - sy) Then
c = Abs((ex - sx) / (ey - sy))
d = 0.5
Do
d = d + c
If d > 1 Then
d = d - 1
a = a + f
End If
b = b + g
Cells(b, a).Interior.Color = 0
If b = ey Then Exit Sub
Loop
Else
???
End If
End Sub
0133デフォルトの名無しさん2011/05/26(木) 07:55:18.33
>>131
1行目からデータ部として使っている場合。

1行目にしかデータがない時、.End(xlUp).Rowで1が取得出来るけど、
全ての行に対してデータがなかった場合も1が取得される。
だからこのままではデータが0件なのか1件なのか見分けが付かない。

て言うか、散々前にそれ言ってる人がいるから今更こんな事言うと「だからそう言ってるじゃん!!」って
心の叫びが聞こえてくる様な気がするよ。
01341312011/05/26(木) 08:43:26.93
>>133
そういうことなら
「最上部に1件データが有ったとしても0件と見なしてみたり」って言うより
「最上部にデータが無くても1件と見なしてみたり」じゃないの?
これなら俺でも分ったよ。
0135デフォルトの名無しさん2011/05/26(木) 10:10:31.61
>>134
それは作りによりけり。
同じこと。
0136デフォルトの名無しさん2011/05/26(木) 10:53:36.21
先頭行にタイトル入れないこともあるって人に聞きたいんだが、たとえばどういうものを作るときそのようになる?
どうも想像力が弱いのか俺には思いつかん。
0137デフォルトの名無しさん2011/05/26(木) 11:31:32.04
バイナリのダンプリストをバイト単位でセルごとに取り込んだり、列が項目として意味をなさない場合と、
シートをワーク用に使用した場合とか。ワーク用にシートを使う場合はどの項目に何が入っているのかは使用書に記述しておけばいいし、
それを見られたくないならVerryHiddenとかで非表示にしておけばいい。
0138デフォルトの名無しさん2011/05/26(木) 11:50:49.24
なるほどデータベース的に使わない場合ね。
0139デフォルトの名無しさん2011/05/26(木) 16:45:46.47
ワークシートを単なるデータ置き場として使う場合

タイトルってのは「人間がシートを直接見る」時に必要な物だから、
データの入出力をフォームやVBAだけでやる場合はタイトルなんか必要ない
実際、そういうアプリは世の中にたくさんある

ここはVBAスレだから、そういうデータ置き場としての使い方は普通に良くあることとして話を進める
0140デフォルトの名無しさん2011/05/26(木) 16:58:38.23
>>139
だからそう言ってるじゃん!!
0141デフォルトの名無しさん2011/05/26(木) 19:19:07.52
Excel本来の表計算ソフトとして使う場合はタイトルが必要ってことだな。
俺ならデータ置き場としてしか使わないならExcelなんか使わないな。
Excelでやる人はExcelに備わった機能を使いたいんだろうけど、大概のものは自作できるし。
0142デフォルトの名無しさん2011/05/26(木) 19:29:01.57
>>141
Excelの機能を使うにはほとんどタイトルいるぞ?
むしろExcelの機能を使わない人がタイトルをつけないんだと思う。
0143デフォルトの名無しさん2011/05/26(木) 19:39:36.25
>>142
そう言われればそうだけど、ソートとかWorksheetFunctionならタイトル要らないな。
でもソートとかWorksheetFunctionレベルならほとんど自作できるよなぁ。
データ置き場にする人がExcelの何を使いたいのか分らなくなったわ。
0144デフォルトの名無しさん2011/05/26(木) 19:41:28.76
タイトルがないと使えないエクセルの機能なんかあったっけ?
0145デフォルトの名無しさん2011/05/26(木) 19:49:37.88
>>144
ピボットとかオートフィルターとかフィルタオプションとか統合とかいろいろあるんじゃね?
0146デフォルトの名無しさん2011/05/26(木) 19:51:51.92
オートフィルターは別にタイトルいらないんじゃない?
0147デフォルトの名無しさん2011/05/26(木) 19:56:45.96
>>143
わざわざDBに接続しなくても、ブックを閉じて開いても値を残せる一番手っ取り早い場所だからな。
ファイルを複数にする必要もないし。
0148デフォルトの名無しさん2011/05/26(木) 19:56:48.85
>>146
やってみたらたしかにそうみたいだけど、先頭行を空白にするくらいなら普通タイトルを入れるんじゃない?
0149デフォルトの名無しさん2011/05/26(木) 20:06:17.26
>>148
え?
オートフィルター設定する時に項目から設定するかデータから設定するか選べない?
バージョンによって違うのだろうか・・・
0150デフォルトの名無しさん2011/05/26(木) 20:33:09.23
>>149
Excel2007にはそういうのはないみたいだな。
もしかしてソートと勘違いしてない?
0151デフォルトの名無しさん2011/05/26(木) 22:38:10.34
Excelはピボットを使うための道具なんだからタイトル入れるのはjsk
0152デフォルトの名無しさん2011/05/26(木) 22:41:10.81
ここはVBAスレだったか。まぁいいか。
0153デフォルトの名無しさん2011/05/26(木) 23:55:15.21
すみません、教えて下さい。
あるエクセルファイルに、別ブックからシートをコピーしたいのですが、
実行時エラー9と怒られてしまい、コピー出来ません。

Workbooks(OpenFileName).Worksheets("Sheet1").Copy
のような形にしているのですが、何がいけないのがご教示いただけますでしょうか。
0154デフォルトの名無しさん2011/05/27(金) 00:47:09.05
>>153
ブック名とシート名を確認
一番多いのがシート名の間違い
0155デフォルトの名無しさん2011/05/27(金) 01:48:06.59
>>154
ご指摘ありがとうございます。
たびたび申し訳ありませんが、
マクロ起動ファイルとは、別のブック内のデータをソートしたいのですが、
どうやっても起動元が並び変わってしまいます。

別ブックをActivateにしても、Withを使ってもうまく動きません・・・
一時間以上悩んでいるのですが、さっぱりです。。
01561552011/05/27(金) 02:26:02.46
すみません自己解決しました。
0157デフォルトの名無しさん2011/05/27(金) 06:22:50.57
〜ボーナス問題〜
???を察して埋めなさい

Sub チンチロリン(s1, s2, s3)
If ??? Then MsgBox "シゴロ"
End Sub
0158デフォルトの名無しさん2011/05/27(金) 09:53:19.54
ダイアログメッセージをループして各処理毎に変数の値を表示したいのですがどうすればいいのでしょうか?
m = "iはインデックス"
mes = i & m
MsgBox "mes", vbOKOnly, "Err"
ではエラーになります
0159デフォルトの名無しさん2011/05/27(金) 09:58:36.32
同様に、シートも
str1 = i & "月シート"
Set ws1 = Worksheets(str1)
のように変数str1をセットすると""を付けてもエラーになります
文字列+数値の変数を式の中に入れて処理させるにはどのようにすればいいのでしょうか?
0160デフォルトの名無しさん2011/05/27(金) 10:05:54.50
>>157
IF s1 * s2 * s3 = 120 Then

'3つの出目をかけ合わせて120になるのは、4,5,6の組合せしか無い
0161デフォルトの名無しさん2011/05/27(金) 10:11:59.62
>>158
それをそのままコピペして使ってみたが別にエラーにならなかったよ。
何かほかの部分でエラーが出てるのでは?
ちなみに、 MsgBox "mes",  のダブルクォーテーションはいらんだろう。
0162デフォルトの名無しさん2011/05/27(金) 10:17:31.93
>>159
こっちも別にエラーの起こる要素が無い。
別の理由でエラーが起こってるはずだ。
0163デフォルトの名無しさん2011/05/27(金) 10:25:35.35
>>161-162
ごめんなさい、今までmesの部分でエラーが出ていたのですが、もしかしたらExcelのバージョン問題だったかもしれません
家のは95でして(苦笑)
ただ、シート部は出来ませんでした
shi = "月"
str = i & shi
Set ws1 = Worksheets(str)
ではインデックスが有効範囲にありませんと出てしまいます
01641632011/05/27(金) 10:29:16.50

ごめんなさい、出来ました
インデックスがおかしかったようです
皆さん、ごめいわくをおかけ致しました
0165デフォルトの名無しさん2011/05/27(金) 15:09:06.01
初心者です

エクセルに入力したテストの点数を
80以上を優
70-79を良
60-69を可
と表示したいのですが上手くいきません
おかしいところがどこか教えてください

Function 成績評価1(ten As Variant)

Dim score As String
Dim seiseki As Variant

score(1) = "優": score(2) = "良": score(3) = "可": score(4) = "不可"

ten = Left(ten, 4)

If ten >= 80 Then seiseki: i = (1)
If 70 <= ten And ten >= 79 Then seiseki: i = (2)
If 60 <= ten And ten >= 69 Then seiseki: i (3)
If 59 <= ten Then seiseki: i = (4)

成績評価1 = score(i)

End Function
0166デフォルトの名無しさん2011/05/27(金) 15:20:41.39
宣言
配列宣言
引数チェック
引数加工
入力値
0167デフォルトの名無しさん2011/05/27(金) 15:26:53.53
>>166
俺宛でいいのかな

つまり基礎すら出来てないってことですか?
0168デフォルトの名無しさん2011/05/27(金) 16:03:19.00
基礎がどうかは知らんけど、VBAではあんまり見掛けない構文だね
俺が似たようなコード書くならconstとかemumとか使うかも試煉
0169デフォルトの名無しさん2011/05/27(金) 16:59:02.40
みんな優しいな…

ハッキリ言ってやれよ
おかしいのは>>165の知能だと!!
0170デフォルトの名無しさん2011/05/27(金) 17:14:48.73
エキスパートのスタンダード終わったんだけど、これからプログラムを作成するにはどういう本がお勧めですか?
最初からそう教えてくれればいいのに!の2冊は読みました。
知識はあるけど、プログラムの作り方がいまいちわからない初級者です。
0171デフォルトの名無しさん2011/05/27(金) 17:20:48.19
エンジニアなんとかとかスキルアップコレクションとかパフォーマンスなんちゃらとか


そういうのじゃないんだよね
0172デフォルトの名無しさん2011/05/27(金) 17:50:07.88
VBAの絵本
0173デフォルトの名無しさん2011/05/27(金) 19:49:19.16
大きな本屋に行って自分で探せ、ヴォケ
0174デフォルトの名無しさん2011/05/27(金) 20:20:01.17
>>最初からそう教えてくれればいいのに
おー、こんな本あったのか。
VBAはExcelについてるヘルプとMSDNくらいしか見たことなかったが
読んでみるかな
0175デフォルトの名無しさん2011/05/27(金) 20:21:03.98
>>170
実際にプログラムを作成しはじめれば、いいんじゃないか。
そうすれば、どういう勉強をすればいいか見えてくると思う。

とくに仕事で他の人が使うプログラムを作ると
ユーザーインターフェイスとか
いろいろな柔軟性とか
が大事だとよく分かる。



0176デフォルトの名無しさん2011/05/27(金) 22:08:41.54
>>165
× If 70 <= ten And ten >= 79 Then seiseki: i = (2)
× If 60 <= ten And ten >= 69 Then seiseki: i (3)

○ If 70 <= ten And ten <= 79 Then seiseki: i = (2)
○ If 60 <= ten And ten <= 69 Then seiseki: i = (3)
0177デフォルトの名無しさん2011/05/28(土) 02:58:50.94
テーブルの、ある行の適当なセルに文字をいれたら
その行全体の色が変わるようにしたいんですが
やり方がわかりません
マクロを使わずにできるならその方法も教えてください
よろしくお願いします
0178デフォルトの名無しさん2011/05/28(土) 03:29:59.68
>>177
A1〜Z1の色を変えたいなら
条件付き書式
=COUNTA(A1:Z1)>0
をA1〜Z1に設定すれば、どこかにデータを入れると書式が反映される
0179デフォルトの名無しさん2011/05/28(土) 04:06:11.82
>177
Private Sub Worksheet_Change(ByVal Target As Range)
    Target.EntireRow.Interior.ColorIndex = 7
End Sub
とか
0180デフォルトの名無しさん2011/05/28(土) 06:15:42.13
〜問題〜
配列と数字Nを渡すとランダムにN個の要素を配列で返す関数を作りなさい
0181デフォルトの名無しさん2011/05/28(土) 07:28:41.81
>>180
何で引数もランダムで作成する数もNなんだ?
引数意味ねーじゃん。
0182デフォルトの名無しさん2011/05/28(土) 08:01:53.76
配列を返さないこともある、だろ。
0183デフォルトの名無しさん2011/05/28(土) 09:10:55.74
>>179
データ消しても色がつくじゃん。
0184デフォルトの名無しさん2011/05/28(土) 09:12:11.50
>>181
頭悪すぎ
0185デフォルトの名無しさん2011/05/28(土) 09:18:06.36
>>184
お前がな
0186デフォルトの名無しさん2011/05/28(土) 10:02:48.56
>>185
読めカス
0187デフォルトの名無しさん2011/05/28(土) 10:12:46.54
>>186
死ねゴミ
0188デフォルトの名無しさん2011/05/28(土) 10:13:57.83
引数が3なら要素数が3の配列を返すということだろ
0189デフォルトの名無しさん2011/05/28(土) 10:26:48.98
>>188
空気読め
0190デフォルトの名無しさん2011/05/28(土) 10:37:00.71
おまいらファイト!w
俺は意味は分ったけど>>180も「重複なしで」を追加すればもう少し分り易かったかもね。
ようするに配列から重複なしでランダムにN個取り出せって話だな。
検索すれば玉石混淆でそこらへんにいっぱい転がってるけど。
0191デフォルトの名無しさん2011/05/28(土) 13:00:23.64
>>190
質問に明記されてないのに、「重複なし」と決めつけるのはいかがなものか
0192デフォルトの名無しさん2011/05/28(土) 13:18:12.39
プログラマなら想定して答えるべきだな
SEならしらん
0193デフォルトの名無しさん2011/05/28(土) 13:32:21.57
一つは
A1に文字列
A2は空白
A3に文字列
〜
と歯抜けになっている

もう一つは
A1に文字列
A2は文字列
A3に文字列
〜
とすべてのセルに文字列が入力
とあった場合上から文字列のあるセル「だけ」を順番に見て行く方法とかって
どうすればいいのでしょうか?
当然両方とも同じプログラムを使用する想定です。

たとえば
上から一行一行見て行って
文字列がある最後の列まで見て
空白行じゃなければ処理をする、空白行は無視するってやり方もあるのですが
どうしてもパフォーマンスが悪くなるので
0194デフォルトの名無しさん2011/05/28(土) 13:32:25.61
プログラマなら想定とか察してとか通用するからいいが、
仕様書を作る側の立場の人は誰が見ても分かるものを作るのが基本。
それが出来ないとSEにはなれない。
0195デフォルトの名無しさん2011/05/28(土) 13:39:26.26
>>193
どうせ上から順番に見なければいけない処理ならデータの最終行までループしてやって空白の時だけ処理飛ばせばいいんじゃないの?
0196デフォルトの名無しさん2011/05/28(土) 13:45:01.69
>>191
重複なしなら簡単すぎて問題にもならんよ。
0197デフォルトの名無しさん2011/05/28(土) 14:03:22.01
SEとプログラマは違うのか?
0198デフォルトの名無しさん2011/05/28(土) 14:18:00.86
構築・開発系とかなら、設計・仕様・コードレビューやQAとかするのがSEだろ
コーディングや現場ドキュメント作成しかしない奴は底辺プログラマ
規模的に全部する(せざるを得ない)のが広義のプログラマ

部署も島も違うが、近くで見る限りはこんな感じだな
0199デフォルトの名無しさん2011/05/28(土) 15:50:12.31
Range("A1:AR100")を選択してセルに入っている値が1よりも大きければ
色をつけるマクロを組みたいのですが
If Range("A1:AR100").Value >= 1 Then
Range("A1:AR100").Interior.ColorIndex = 37
End If
これで実行したら「型が一致しません」とエラーが出ました。
手直しをお願いします。
0200デフォルトの名無しさん2011/05/28(土) 15:53:46.39
当たり前だ
0201デフォルトの名無しさん2011/05/28(土) 16:01:23.67
>>199
For Each c In Range("A1:AR100")
  If c > 1 Then c.Interior.ColorIndex = 37
Next
0202デフォルトの名無しさん2011/05/28(土) 16:02:00.89
>>200
答える気がないんなら
いちいちつまらん茶々を入れるな
0203デフォルトの名無しさん2011/05/28(土) 16:09:09.99
>>202
答える気がないんなら
いちいちつまらん茶々を入れるな
0204デフォルトの名無しさん2011/05/28(土) 16:12:40.89
>>201
できました!
ありがとうございます
0205デフォルトの名無しさん2011/05/28(土) 22:04:29.40
>>195
それがベストですか?
0206デフォルトの名無しさん2011/05/28(土) 22:09:05.40
パチンコ禁止デモ



大阪にて北朝鮮系ヤクザが在特会に襲撃!!!!!!
http://www.nicovideo.jp/watch/sm14536643

パチンコを死守する北朝鮮系ヤクザ!!!






0207デフォルトの名無しさん2011/05/29(日) 00:59:58.67
>>205
ベスト?俺はベストなんて常にないと考えて作っているけど。
例えば今回のケースだと、ひょっとしたら配列数式とかを使えば空白を除いた表を
数式で隣に配置出来るかも知れないし、
それを使った方が効率いいかも知れない。そういった調べたり考えたりしてモアベターな方法を使って行くもんだと思ってるし、
どんな方法を使ってもそれよりいい方法がないとは言い切れない。
この方法がベストですなんておこがましい事は今までも言った事がないし、
これからも言うつもりもないよ。
0208デフォルトの名無しさん2011/05/29(日) 13:50:54.06
とある編集用のシートを作っています、
文字列置換ダイアログの「検索する文字列」と「置換後の文字列」のリストに任意のリストを設定したいと思っています。
普段は過去に検索or置換した文字列がリストに入っていると思うのですが、そのリスト内容をvba側で操作したいのです。

技術的に可能であれば教えていただけないでしょうか。よろしくお願いします。
0209デフォルトの名無しさん2011/05/29(日) 14:06:01.52
>>208
ユーザーフォームで検索ダイアログ作りましょう
そうすれば自由自在です
0210デフォルトの名無しさん2011/05/29(日) 14:36:00.85
>>209
返答ありがとうございます。
やはりフォーム作成が一番手っ取り早いですか。。
後出しになってしまいますが、制約があり可能であればフォームを作成せずに行いたいのです。
0211デフォルトの名無しさん2011/05/29(日) 15:01:01.77
>>210
やっぱりこう言った場合はAPIでダイアログからコールバックでセンドメッセージだなと
適当な文字の羅列を書いてみるが気にするな。
0212デフォルトの名無しさん2011/05/29(日) 15:21:37.65
>>210
最初に画面が多少チカチカしてもいいんなら、
SendKeysで検索ダイアログを必要な回数だけ開いてやるって手がある
ただしこの方法だと項目の追加はできるけど削除はできない
0213問題マン2011/05/29(日) 16:09:00.99
〜スペシャル問題〜
???に入るベストな式を答えなさい(135点)

Sub bezier2d(x1, y1, x2, y2, x3, y3)
Dim a, b, c, d, e, f, g, h, i
a = 2 ^ 10
b = a * a
c = x1 * b
d = y1 * b
e = ???
f = ???
g = 2 * x3 - 4 * x2 + 2 * x1
h = 2 * y3 - 4 * y2 + 2 * y1
For i = 0 To a
Cells(d / b, c / b).Interior.Color = 0
c = c + e
d = d + f
e = e + g
f = f + h
Next
End Sub
0214デフォルトの名無しさん2011/05/29(日) 16:50:18.59
JKの宿題スレときいて
0215デフォルトの名無しさん2011/05/29(日) 18:11:08.35
>>213
あのね、問題ってのは
「何を読ませるか」「何を考えさせるか」「どう解かせるか」
ってのを考察出来ない人には作れないものなのよ

君が毎度出してるのは、問題でもなんでもない
そもそも、自分より上手、目上の奴に問題出そうてのが間違いだ
0216デフォルトの名無しさん2011/05/29(日) 20:34:53.68
>>215
まったくだ。>>213のはいつも面白くない。
見たくもないオナニーを無理矢理見せ付けられてる感じだ。
0217デフォルトの名無しさん2011/05/29(日) 21:21:41.26
>>213
VBAの宿題スレでも立てて一人で問題だしてろ
0218デフォルトの名無しさん2011/05/29(日) 21:43:16.97
答えないと、「おまえら、解らないから言い訳代わりに叩いてるだけだろ」とか言ってきそうだけど
皆、そんな煽りに乗せられて答えるなよ。

答えたらつけ上がって、いつまでもくだらない問題もどきを投下してくる。
ここでまともな質問に回答している奴らが、このくらい難なく解けるのは皆解ってるから
一人くらい「おまえら解らないんだろ」とか勘違いして言ってくる奴が居ても放っておけってことで。
02192082011/05/29(日) 21:51:45.68
>>211
sendmessageでそんな使い方もいけるんですね、ちょっと調べてみます。

>>212
後だしばかりになってしまいすみません、
リストは何パターンかあるのでリフレッシュできるのが望ましかったです。
お手数掛けました、ありがとうございます!
0220問題さん2011/05/30(月) 02:33:09.84
おまいらパーフェクトな反応ごちそうさまです
悪意はないんで少し弁解させてください・・・><

>>215
>何を読ませるか どういう計算で二次ペジェ曲線を表現するプログラムか
>何を考えさせるか 曲線間を1024等分した時のx,yの最初の増減値
>どう解かせるか すでに分かっているg,hの式の形から
いや別に俺は下手で構わないんだが・・
なんでそんなに上手アピールしてんぢょwwぴょwww

>>216
1レスで済むようなプロシージャがオナニーに見えるのかい?

>>218
そんなに答えないことに布石打たなくても大丈夫だぜww
数学知らなくてもプレゼンハムでググればお前でも分かるよ
くだらない問題に上のほうで嬉々として反応してたように見えるが・・
そんなに嫌なら誰か答えたら終わりにするぜ!

ってかこれはいろんな人に知ってほしい
俺は先週これ知った時感動したぜ
0221デフォルトの名無しさん2011/05/30(月) 07:42:03.34
>>220
>ってかこれはいろんな人に知ってほしい

チェーンメールならぬチェーン書き込み乙
ブログでも立てて独りでやれ
掲示板でやるな
0222デフォルトの名無しさん2011/05/30(月) 07:52:52.92
>>220
悪意が無くて弁解も終わったならとっとと消えるべきだな。
ここは質問スレであって出された問題に答えるスレではない。
自分で問題スレ作ってそこでやれば興味のある奴は来てくれるだろう。
もっともそんなオナニー問題出してる様ではすぐに過疎スレになってDat落ちするだろうけどな。
0223デフォルトの名無しさん2011/05/30(月) 08:04:55.47
予想通りの反応過ぎてワロタw

この子、なんでこんな風になっちゃったんだろう?
余程ストレスやコンプレックスが強いのかな?

つーか215にも見当違いなこと答えてるし
単純に頭が悪いのかな?
0224デフォルトの名無しさん2011/05/30(月) 08:18:24.75
頭が悪いん云々以前にいわゆる基地街
知能じゃなくて知性に欠けているな
0225デフォルトの名無しさん2011/05/30(月) 08:23:02.29
お前↑の馬頭には加わってなかったが、お前みたいな馬鹿相手に1回答えたことを反省。
そもそも答えても返事がなかったもんな。
0226デフォルトの名無しさん2011/05/30(月) 09:18:38.45
名前見ても知性知能共に低いのが伺える

「問題マン」って、、、、、問題抱えた男ですかw
それはそれで本質的には間違ってないんだが、それは周りが呼称する場合で
自ら名乗るなら、普通は「出題マン」とかだよな
0227デフォルトの名無しさん2011/05/30(月) 10:22:18.68
質問させてください
VBAというのはAuto_Open()ではなく、A1とA2の値が違った場合とか、
C1の値が変更された瞬間にマクロが作動して「値が変わりました」とかのダイアログが
表示されたりは出来ないのでしょうか?
自分でマクロを「実行」しなければいけないのでしょうか?
0228デフォルトの名無しさん2011/05/30(月) 10:28:15.18
>>227
ユーザー定義関数
イベント
好きな方を使って下さい
0229デフォルトの名無しさん2011/05/30(月) 10:31:27.20
> A1とA2の値が違った場合
A1、あるいはA2の値が変更された上でA1とA2の値が違う場合なら
Worksheet_Changeイベントで可能
変更された上ではなく、ブックを開いた時点で違いが有ればということなら
Auto_OpenやWorkbook_Openで確認すれば良い

> C1の値が変更された瞬間
Worksheet_Change
0230デフォルトの名無しさん2011/05/30(月) 20:45:16.21
>>220
てめえのスレじゃねーんだよカス
0231デフォルトの名無しさん2011/05/30(月) 22:27:24.38
はじめてここで質問させていただきます。

『ファイル名を指定して実行』ダイアログを開き
PostMessage または SendMessageでフルパスを入力して
プログラムを実行しようとしていますが、
キーが送られません。(名前の欄に文字が送られません)
SendKeyではうまくいくのですが、
スクリーンロックを考えているので使えません。
何かいい方法があれば教えてください
0232デフォルトの名無しさん2011/05/30(月) 23:24:21.95
>>231
shell でやれば?
0233デフォルトの名無しさん2011/05/31(火) 00:49:22.73
.Cells(n, 1) = sh.Cells(i, "A")
.Cells(n, 2) = sh.Cells(i, "B")
.Cells(n, 3) = sh.Cells(i, "C")
.......AX欄まで続く

これをRangeでシンプルに書くとどうなるか、エスパーの方教えてください。
こんな風↓に考えたのですが、どうしても範囲が合わずエラーになってしまいます。

.Range("A" & n - x, "CQ" & n) = sh.Range("A2", "CQ" & x)

02342332011/05/31(火) 00:54:20.85
誤 ".......AX欄まで続く"
正 ".......CQ欄まで続く"
0235問題マン2011/05/31(火) 01:02:14.54
時間切れです><
あれ?おまいらあからさまな間違いにつっこまないとかあれ?
>>222
消えてほしい理由がわからんな〜
答えて楽しめばいいじゃない^^
それとわかる範囲の問題に嬉々として反応してくれる人がいるみたいだぜ〜?
あと俺スレ立てできない><
>>223
予想通りレスが予想通りwwwイライラすんなよww
ただベジェ曲線レベルの段階でこうなったのは実は想定外だったぜ><
>>226
つっこむとこそこかよww
>>230
遅いぜー 今言っても説得力が・・

〜おまいらでもすぐわかるサービス問題〜
???に入るできるだけ短い式を答えなさい
sub チンチロリン(s1,s2,s3)
if ??? then Msgbox "5です(ゾロ目じゃないぞ)"
End sub
0236デフォルトの名無しさん2011/05/31(火) 01:16:21.60
>>233
sh.Range("A" & i & ":CQ" & i).Copy (.Cells(n, 1))
0237デフォルトの名無しさん2011/05/31(火) 06:29:38.20
>>235
>消えてほしい理由がわからんな〜
スレチな上にいつも問題が面白くない。

そっちこそVB6スレでもコマンドボックスとか_clicとかわけ分からない事かいて
フルボッコにされて追い出されたからって、
このスレに必死にしがみ付いている理由が分からないんだけども。
02382332011/05/31(火) 06:59:54.24
〉〉236
ありがとうございます!
0239デフォルトの名無しさん2011/05/31(火) 07:55:10.81
問題マンコはなんでこんなにみんなから嫌われてるのに自殺しないの?
0240デフォルトの名無しさん2011/05/31(火) 23:53:03.85
>>231
ほらよ。

Option Explicit

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hParent As Long, ByVal hChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long

Sub hoge() 'Win7
Dim h As Long, i As Long, com As String

com = "c:\hoge\hogehoge"
Shell "rundll32 shell32.dll,#61"
h = FindWindowEx(0&, 0&, "#32770", "ファイル名を指定して実行")
h = FindWindowEx(h, 0&, "ComboBox", vbNullString)
h = FindWindowEx(h, 0&, "Edit", vbNullString)
For i = 1 To Len(com): SendMessage h, &H286, Asc(Mid$(com, i&, 1&)), 0&: Next
End Sub

でも何でShellとかShellExecuteでやらないの?
0241大門さん2011/06/02(木) 00:30:18.23
1〜9の4つの数字を四足演算で10にできるかどうか
判定できるマクロを作りたいのですが
どうしたらいいでしょうか?
02422332011/06/02(木) 00:49:18.50
以下はフォルダ内のデータを転記するためのマクロの一部なのですが、wbには開くためのパスワード"password"が設定されています。
ブックの"password"をマクロで入力し開くにはどうしたらよいか教えてください。

Dim fn, wb, myPath
myPath = ThisWorkbook.Path & "\"
fn = Dir(myPath & "*.xls")
Set wb = Workbooks.Open(myPath & fn)

' ↓こんな感じかと考えながらもうまく動作しないです。。
Workbooks.Open Filename:=wb, Password:="password"
0243問題マン2011/06/02(木) 03:21:24.09
おまいらテンション落ちすぎだぜ!

>>237
その人をよく知らないんだがたぶん
引数がランダムになるとか重複なし抽出のほうが速いとか言ってる人じゃね?

>>239
ありがとうございます^^

>>242
これはここの人は厳しいから教えてもらえないんじゃね?
答え見た悪意ある人がマクロから虱潰しでパス突破しようとするかも
0244デフォルトの名無しさん2011/06/02(木) 08:00:04.64
>>242

Dim fn as String, myPath as String
Dim wb as Workbook
myPath = ThisWorkbook.Path & "\"
fn = Dir(myPath & "*.xls")
Set wb = Workbooks.Open(FileName:=myPath & fn, Password:="password")
02452332011/06/02(木) 18:30:37.98
242
ありがとうございます!
m(_ _)m
0246デフォルトの名無しさん2011/06/02(木) 21:10:25.53
テキストボックスを配置して入力された文字を検索したいのですが
検索する文字列が1行の場合
http://www.moug.net/tech/exvba/0090008.htm
ここに書いてある内容でできたのですが、例えば2行
犬
猫
のように入力して2種類検索したい場合どのようにすればよいでしょうか?
よろしくお願いします。
0247デフォルトの名無しさん2011/06/02(木) 21:41:54.03
既存の検索機能では1種類の文字列での検索しか出来ない

2種類の文字列での検索がしたければ、既存の検索機能を2回まわすか
自前で検索機能を作るかだな

俺は正規表現で検索できるものを自作して使ってる
「2つの文字列」ではなく「2つの文字」なら、正規表現ではなくLike演算子でも可能
0248デフォルトの名無しさん2011/06/02(木) 22:40:01.75
a or b
0249デフォルトの名無しさん2011/06/02(木) 22:40:34.68
>>247
スキルの低い回答者お断り
0250デフォルトの名無しさん2011/06/03(金) 00:19:50.69
課金アイテム購入するニダ
0251デフォルトの名無しさん2011/06/03(金) 00:56:21.85
テキストボックスを文字列に格納して二種類に分割しれば良いだけでは
0252問題マン 2011/06/03(金) 09:10:26.52
うわー
ググったらパスつきマクロの破り方まで簡単に出てきたわ・・

>>249
煽ってる暇あったらスキルの高い回答を書くんだチンカス!
0253デフォルトの名無しさん2011/06/03(金) 09:29:25.55
とゆーかつい最近だろ別ブックのパス制御の話
02542462011/06/03(金) 13:33:56.75
答えてくださった皆さんありがとうございます。
しかし、どの本もそうですがやりたいと思った事が書いてない
ということがほとんどな気がします。
ネットが便利すぎるだけかもしれませんが
皆さんの書いたコード見てると凄いなーと感心しっきりです。
0255 忍法帖【Lv=1,xxxP】 2011/06/03(金) 20:00:22.46
置換について質問です
Selection.Replace What:="1", Replacement:="99"
"99"の部分を別シートのA1の値にすることはできますか?
環境はエクセル2000です
0256デフォルトの名無しさん2011/06/03(金) 21:28:55.20
>>255
Replacement:=Worksheets("Sheet2").Range("A1").Value
0257ninja2011/06/03(金) 22:26:17.24
>>256
ありがとうございます
0258デフォルトの名無しさん2011/06/04(土) 10:28:39.89
VBではbeep音の周波数を変えられるそうですが
VBAでは可能でしょうか?
0259デフォルトの名無しさん2011/06/04(土) 11:43:05.15
VBでもWin32API使わないと周波数は変えられないし
VBAでもWin32API使えば周波数は変えられる
0260デフォルトの名無しさん2011/06/04(土) 22:26:44.82
セルの数字の最大値を記録していきたしのですが、
そのような関数orマクロはないでしょうか?

例えば、A1セルの値が

100→130→180→150→120

と変化した場合、180の値をどこかのセルで表示させたいのです。
宜しくお願い致します。
0261デフォルトの名無しさん2011/06/04(土) 22:30:45.08
Worksheet_Changeで変化があるたびにどっか別のシートに記録しておいたものと
比較して大きければそれを保存しておくとか
0262デフォルトの名無しさん2011/06/05(日) 08:23:13.97
循環参照上等で組んだらこうなったわさ。
第一引数にこの数式の入ったセル位置を、第二引数に対象のセル位置を設定して、
標準モジュールに以下の関数を書いて、ユーザー定義関数として使うわさ。

Option Explicit

Function hoge(IN_KeepValueCell As Range, IN_vValue As Variant) As Variant
Static vMaxValue As Variant
Static bFirstFlg As Boolean

つづく
0263デフォルトの名無しさん2011/06/05(日) 08:33:49.82
>>262の続き

If IN_KeepValueCell.Count <> 1 Then
hoge = "複数セルは選んで欲しくないべさ"
Exit Function
End If
If Not bFirstFlg Then
vMaxValue = IN_KeepValueCell.Value
bFirstFlg = True
End If
If IN_vValue <> vbNullString Then
If IsNumeric(IN_vValue) And IN_vValue > vMaxValue Then vMaxValue = IN_vValue
Else
vMaxValue = 0
End If
hoge = vMaxValue
End Function

だれか循環参照対応コテ入れして・・・orz
0264デフォルトの名無しさん2011/06/05(日) 16:38:47.56
test.xlsと同じ層にある n KB以下のファイルを削除するにはどうしたらいいでしょうか?
0265デフォルトの名無しさん2011/06/05(日) 16:46:44.84
>>264
FileLenかFileSystemObjectの.Sizeプロパティでブックのサイズ取得してループで回す
指定のサイズ以下なら削除
0266デフォルトの名無しさん2011/06/05(日) 17:22:18.47
>>265
ありがとうございました
0267デフォルトの名無しさん2011/06/06(月) 18:12:23.01
「コメントが無いセルにはコメント挿入、ある行には削除」
というマクロですが、以下で良いでしょうか?

一応自分の環境では動いていますが…時々矢印の表示が残ることがあります

Sub Comment_Add_Clear()
If ActiveCell.Comment Is Nothing Then
ActiveCell.AddComment ""
ActiveCell.Comment.Visible = True
Else
ActiveCell.ClearComments
End If
End Sub
0268デフォルトの名無しさん2011/06/06(月) 20:00:11.35
300行くらいのデータ2列を
配列(300,2)に格納して別シートにコピーしたりなどで
扱おうと思ってるのですが
これって配列の使い方としてまちがってますか?
なんとなく大量のデータを記憶させておくのってよろしく
ないのかな?と思ってしまいます。
0269デフォルトの名無しさん2011/06/06(月) 20:32:56.17
>>268
「など」じゃわからんよ
もっと具体的に、何と何をやりたいのか
シートから別のシートにコピーするだけならCopyメソッドの方が簡単だし
0270デフォルトの名無しさん2011/06/06(月) 22:18:12.38
配列を介すと値しかコピーされないが
値だけのコピーなら、配列を介さず
コピー先範囲.Value = コピー元範囲.Value
で事足りる
0271デフォルトの名無しさん2011/06/06(月) 22:57:16.01
コピー以外のことは考え中です。。
フォーマットの違う他シート2、シート3に
それぞれシート1からコピーしようとしたときに
配列使った方が便利なのかな?と思いました。
 300行2列程度なら>>269さんのやり方がベストなのでしょうか?
いまいち配列のいきる使い方がわからないです。
0272デフォルトの名無しさん2011/06/06(月) 23:04:45.88
失礼
コピー先範囲.Value = コピー元範囲.Value
この方式でした。
0273デフォルトの名無しさん2011/06/06(月) 23:10:36.43
>>271
言ってることがよくわかんない。
何で無理して配列使わなきゃならんかな。
配列の使い方を勉強したくてその過程で出て来た問題なのか、
その問題に当たったから配列使えば解決出来そうと思ったのか、どっちなんだ?
0274デフォルトの名無しさん2011/06/06(月) 23:31:04.50
>>271
まあ小学校卒業してから
また質問すればいいんじゃないか?
実際に使うわけじゃないだろ?

暇があるっていっても、
みんなお前よりは忙しいんだからさ
自重しろハゲ
0275デフォルトの名無しさん2011/06/06(月) 23:56:40.27
>>268
基本思考はあってる。
でもそれ実装した奴はそんなもん当たり前のレベルで知ってる。
なので好きにしろ。
0276デフォルトの名無しさん2011/06/07(火) 05:47:24.61
>>270
それって配列を介してるじゃん。
コピー元範囲.Valueは2次元配列だ。
0277デフォルトの名無しさん2011/06/07(火) 06:46:40.32
配列じゃなくて配列変数の話だって文脈でわかれ
0278デフォルトの名無しさん2011/06/07(火) 07:09:28.89
そのマクロを第3者が使うとして、、、その第3者にしてみたら要求を満たしていれば、
とんでもなく遅いとかとんでもなく速いとかでなければ中身がどうだろうと関係ないわけ
で、なんで配列に拘るのか?
0279問題マン 2011/06/07(火) 08:11:30.11
ウン百回もコピーするならいったん配列に格納したほうがいちいち参照しないぶん無駄がないぜ
0280デフォルトの名無しさん2011/06/07(火) 08:14:15.84
1,1〜9,9のセル範囲の偶数列偶数行にランダムに10個●が配置されています。
輪にならないようになるべく少なく○を置いて全ての●と繋げるにはどうすればいいでしょうか?
あと試す度に違う結果になるようにしたいです。><
0281デフォルトの名無しさん2011/06/07(火) 08:43:18.19
>>279
嘘書くんじゃねーよ。
まさしく問題マンだなw
0282デフォルトの名無しさん2011/06/07(火) 09:15:23.38
コピペだけならペをうん百回繰り返した方が良くね?
0283デフォルトの名無しさん2011/06/07(火) 09:47:15.68
>>280
手作業で
0284デフォルトの名無しさん2011/06/07(火) 11:00:11.15
>>280
スレ違い
0285デフォルトの名無しさん2011/06/07(火) 12:24:21.34
問題マンは無駄云々を語るにはまだ早い。
0286デフォルトの名無しさん2011/06/07(火) 14:40:08.93
>>281
無駄なコードがないって意味では?

俺なら
配列 = 元範囲
配列を回して書式やデータちぇっく
新範囲=配列
ってするけど
0287デフォルトの名無しさん2011/06/07(火) 15:02:14.43
宜しくお願いします。次のマクロを作りました。

Sub 色によって判別()

Dim 行 As Long
For 行 = 27 To 120

If Cells(行, 122).Interior.ColorIndex = 47 Then'これが赤色のとき
Cells(行, 247).Value = 5

If Cells(行, 122).Interior.ColorIndex = 44 Then'これが黄緑色のとき
Cells(行, 247).Value = 1

Else
Cells(行, 247).Value = 0

   End If
End If
Next 行
End Sub

列DR27〜120の色によって、それぞれの行IMの数字を変えたく、
上記のマクロを製作したのですが、最初のIFの条件(赤色の時)は上手く良くのですが、
2番目のIFの条件(黄緑色の時)が反映されず困っています。修正点等宜しくお願いします。
OS=windowsXP EXCEL=2000 です。
0288デフォルトの名無しさん2011/06/07(火) 15:10:27.21
>>287
Sub 色によって判別()
  Dim 行 As Long
  
  For 行 = 27 To 120
    If Cells(行, "DR").Interior.ColorIndex = 47 Then 'これが赤色のとき
      Cells(行, "IM").Value = 5
    Else
      If Cells(行, "DR").Interior.ColorIndex = 44 Then 'これが黄緑色のとき
        Cells(行, "IM").Value = 1
      Else
        Cells(行, "IM").Value = 0
      End If
    End If
  Next 行
End Sub
0289デフォルトの名無しさん2011/06/07(火) 15:18:58.78
>>287
いくつも場合分けする時はSelectを使った方がいいよ

Sub 色によって判別()
  For 行 = 27 To 120
    Select Case Cells(行, "DR").Interior.ColorIndex
      Case 47 'これが赤色のとき
        Cells(行, "IM").Value = 5
      Case 44 'これが黄緑色のとき
        Cells(行, "IM").Value = 1
      Case Else 'その他
        Cells(行, "IM").Value = 0
    End Select
  Next 行
End Sub
0290デフォルトの名無しさん2011/06/07(火) 15:27:34.37
>>286
冗談はやめましょう。
0291デフォルトの名無しさん2011/06/07(火) 17:03:10.27
>>287です。

>>288
>>289
お二人とも本当に有難うございます!
問題解決しました!
わざわざコードまで教えていただき感激です。
]>>289
そんなやり方があったとは知りませんでした。
重ねて有難うございます!活用します!
0292デフォルトの名無しさん2011/06/07(火) 20:07:11.59
まともな質問には優しいお前ら
0293デフォルトの名無しさん2011/06/07(火) 21:29:11.78
sub txtbox1_Change ()

  call 処理

end sub

というプロシージャが
txtbox2、txtbox3・・・・
と10個程度続く場合、ひとつの
プロシージャにまとめることはできませんか?

txtbox1から10のいずれかがChangeで
call 処理
というような。

0294デフォルトの名無しさん2011/06/07(火) 22:11:53.16
>>293
WithEventsでぐぐれ
0295問題マン2011/06/07(火) 22:47:35.04
べろべろばー
>>287
IfでやるならInterior.ColorIndexを何度も参照しないように
いったん変数に入れたほうが無駄がないぜ!

>>293
新しくClass1を挿入
Public WithEvents mytx As MSForms.TextBox
Public Sub init(a)
Set mytx = a
End Sub
Private Sub mytx_Change()
処理
End Sub

グローバルにインスタンス作成
Dim myclass(10) As New Class1

以下を作動させる(名前違ったら適当に変えてね)
For a = 1 To 10
Call myclass(a).init(Sheet1.OLEObjects("TextBox" & a).Object)
Next

で試したら最初はうまくいったけどいじってたら効かなくなったぜ!
変数myclassを保持してる間だけ有効
テキストボックスごとに処理を変えるならMe.mytx.Nameを処理に渡して分岐させれ
0296デフォルトの名無しさん2011/06/07(火) 22:51:16.71
>>295
やはりクラスモジュールを使用するのですか。

検索して勉強しても
いまいちクラスが理解できないんですよね。

0297デフォルトの名無しさん2011/06/08(水) 00:51:32.59
.netならまだわかるけどVBAでのクラス構築がいまいちわからん
定義エラーでまくり
0298デフォルトの名無しさん2011/06/08(水) 14:11:51.75
>>295
ヒントが出れば、答え探してきて、コピペ回答するくらいはできるんだな
0299デフォルトの名無しさん2011/06/08(水) 16:41:04.83
今日から始めるんですけど、
ボタン押す→図出現→適当なセルに文字入力→図に反映
って難易度的にはどのぐらい?
0300デフォルトの名無しさん2011/06/08(水) 18:51:41.24
中級
0301デフォルトの名無しさん2011/06/08(水) 18:52:39.54
五段階の2
1は変数が理解できるレベル
0302デフォルトの名無しさん2011/06/08(水) 19:51:41.90
段階少なくね?
5はどれくらいのレベルなのさ?
0303デフォルトの名無しさん2011/06/08(水) 20:36:44.94
>>302
タッチタイピングできる
0304デフォルトの名無しさん2011/06/08(水) 20:55:39.25
開発者より詳しい
0305デフォルトの名無しさん2011/06/08(水) 22:32:33.14
このスレで他人の回答にいちいちケチを付けるのがレベル5
0306デフォルトの名無しさん2011/06/08(水) 22:37:13.37
CSV出力をすると、書式が日付のセル(例:2011/06/08)が
"2011/06/08"のようにダブルクォーテーション付きとなってしまいます。
2011/06/08のようにダブルクォーテーション無しで出力するには
どうすればよいのでしょうか?
0307デフォルトの名無しさん2011/06/09(木) 00:53:06.24
>>306
直接CSV形式でやる方法はない
VBAでコンマ区切りの文字列を自分で作ってテキストファイルに出力するしかない
0308デフォルトの名無しさん2011/06/09(木) 01:16:45.19
VBAの入門書はひと通り読んで、
フォーム入力とか、抽出、転記はかけるようになってきた。
発展というか、入門書より、実用的な本でおすすめありますか?

経験上、やはり、ネット検索より、本のほうが理解しやすいみたいです。
0309問題マン2011/06/09(木) 04:11:04.42
クラスでつっこみ所を用意したのにスルーされたぜ
>>280
これのマップ生成で使ってるぜ
ttp://www42.atwiki.jp/syugyou?cmd=upload&act=open&pageid=236&file=ttt.zip

>>296
エクセル2030ごろには同コントロール共用イベント→個別イベント
って流れになってるから大丈夫だぜ!

>>297
昔このスレの人がVBAのクラスは糞だから使わないほうがいいって言ってたぜ!

>>298
そうかwwwコピペに見えたかwwwww

>>299
ノンマクロでもけっこうなもん作れるから中級だぜ!

>>306
>>307だな
フォーマットを理解すればどんなファイルでもOPENステートメント使って自力で出力可能だぜ!

>>308
これに答えると宣伝乙っていわれるぜ!
Excel VBA アクションゲーム作成入門
0310デフォルトの名無しさん2011/06/09(木) 17:53:05.76
セル内の数値秒の間、1秒ごとに繰り返すプログラムを作ろうとしているのですが実行時エラーが出てしまいます.

Public Function myFunc()
If 秒数セルが0 Then
Application.OnTime Now + TimeValue("00:00:01"), myFunc, False
Else
秒数セル -1
処理
→ Application.OnTime Now + TimeValue("00:00:01"), myFunc
End If
End Function

エラー発生個所は矢印のところです。
OS=windowsVista EXCEL=2007です。
0311デフォルトの名無しさん2011/06/09(木) 17:59:50.02
事故解決しました
0312デフォルトの名無しさん2011/06/10(金) 07:42:52.29
ホントだ。キチガイがいる
0313デフォルトの名無しさん2011/06/10(金) 23:02:03.02
宜しくお願いします。

コードが長くて書けないのですが、EXCELのバグではないか?
という局面に直面しています。次の手順をVBAで踏むと

�@シートAで複数のセルをセレクトコピーして、別のシートBへ貼り付けます。

�A次に、シートBで複数のセルをセレクトコピーして、シートAへ貼り付けます。

�@は問題ないのですが�Aの際、どういうわけか�@でコピーされた内容
(シートAのセルデータ)が貼り付けられてしまうのです。


Application.CutCopyMode = False Copy も使用しています。

EXCE2000でです。宜しくお願いします。
0314デフォルトの名無しさん2011/06/10(金) 23:05:22.31
1行ずつ実行していって動作を調べろ
03153132011/06/10(金) 23:09:21.10
事故解決しますた!
すいません。
全然違う単純ミスでした。
すいません!
0316デフォルトの名無しさん2011/06/10(金) 23:13:24.22
またお前か
0317デフォルトの名無しさん2011/06/10(金) 23:34:26.53
大体、掲示板に質問してくるレベルでExcelのバグか!?なんて100年早いわ

疑いたくなることあるけどw
0318問題マン2011/06/11(土) 02:50:56.99
前田敦子のどこがいいんだぜ

>>310
他サイトだとどう解決したか書いてけ!って怒られたりするぜ
2chだからどーでもいいけど

>>312
後付けで問題禁止とかファビョり出した人のことかい?
触れないであげようぜ・・忘れたい過去みたいだからさ・・

>>317
俺なんか自動保存をバグだと思ってたぜ!
0319デフォルトの名無しさん2011/06/11(土) 05:59:50.15
初心者です。変数の定義の質問です。

Dim v (1 to 10, 1 to 10) As Variant

v の後の(1 to 10, 1 to 10)の意味がわかりません。
詳しい方教えてください。お願いします。


0320デフォルトの名無しさん2011/06/11(土) 06:29:32.78
>>319

(1 to 10) なら以下のような入れ物を用意するということ
□□□□□□□□□□

(1 to 10, 1 to 10)ならこんな感じ
□□□□□□□□□□
□□□□□□□□□□
□□□□□□□□□□
□□□□□□□□□□
□□□□□□□□□□
□□□□□□□□□□
□□□□□□□□□□
□□□□□□□□□□
□□□□□□□□□□
□□□□□□□□□□
0321デフォルトの名無しさん2011/06/11(土) 10:30:57.94
そう言えば前スレでテーブルジャンプに付いて質問した者だけど、自己解決したから挙げさせて頂くわさ。
配列か何かにジャンプテーブルを作って、それでテーブルジャンプをしたいんだけどって言う質問で、
スレチだからダメって言われたけど、何かVBAで普通に簡単に出来たわさ。

標準モジュール側
Sub hoge()
Dim sJmpTbl(2) As String
Dim ocls1 As New cls1
Dim vMtdNm As Variant
sJmpTbl(0) = "hoge1"
sJmpTbl(1) = "hoge2"
sJmpTbl(2) = "hoge3"
For Each vMtdNm In sJmpTbl
Call CallByName(ocls1, vMtdNm, VbMethod)
Next
End Sub

クラスモジュール側(クラス名:cls1)
Sub hoge1()
Call MsgBox("hoge1が呼ばれました")
End Sub

Sub hoge2()
Call MsgBox("hoge2が呼ばれました")
End Sub

Sub hoge3()
Call MsgBox("hoge3が呼ばれました")
End Sub

かなり端折って書いたけど、こんな感じで片付いたわさ。
0322デフォルトの名無しさん2011/06/11(土) 10:32:06.55
いれものじゃねーよ
メモリ上にその値を確保すんだよ
0323デフォルトの名無しさん2011/06/11(土) 10:38:07.35
値の領域だから入れ物でいいじゃん。
0324デフォルトの名無しさん2011/06/11(土) 10:40:11.65
メモリ上の領域を分かり易く入れ物に例えたんじゃない?
それに値を確保するってどういう事?
俺には領域を確保している様にしか見えないんだけど。
0325デフォルトの名無しさん2011/06/11(土) 10:41:39.40
>>322
>メモリ上にその値を確保すんだよ

その値ってどの値なんだよ (w
0326デフォルトの名無しさん2011/06/11(土) 11:01:18.66
何言ってるんだよ
その値って言えばほら、そこにあるその値の事だろ


w
0327デフォルトの名無しさん2011/06/11(土) 11:42:59.08
319です。
>>320
ありがとうございます。すごくわかりやすかったです。

ちなみに >>321 の
Dim sJmpTbl(2) As String
(2)はどのようなことをさすのでしょうか?
stringが文字列型なので2文字分の入れ物を確保?ってことでいいのでしょうか。
0328問題マソ2011/06/11(土) 12:05:25.87
>>327
そのとおり
0329デフォルトの名無しさん2011/06/11(土) 12:06:14.85
>>327
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1036835140
0330デフォルトの名無しさん2011/06/11(土) 12:15:56.07
327です。
>>328
ありがとうございます。
327 での2文字分の表示は As string * 2 と何か違う点がありますか?

0331デフォルトの名無しさん2011/06/11(土) 13:52:38.70
ここで聞くよりググった方が早いだろうと思うんだが?
0332デフォルトの名無しさん2011/06/11(土) 17:53:45.25
だな。あっさり騙されているみたいだし。
0333デフォルトの名無しさん2011/06/11(土) 21:07:39.82
騙されてたのか。悲しいぜ。
頼みますだれか 327 の(2)について教えてください。
お願いします。 
0334 忍法帖【Lv=1,xxxP】 2011/06/11(土) 21:20:36.35
シート上にあるすべての埋め込みグラフを少し下に移動させたいのですが
Dim Move As Chart
For Each Move In Charts
Move.IncrementTop 50#
Next Move
メソッドまたはデータメンバが見つかりません。とエラーが出ます。
0335デフォルトの名無しさん2011/06/11(土) 21:28:24.07
書いてある通り
0336デフォルトの名無しさん2011/06/11(土) 21:28:30.56
>>333
>頼みますだれか 327 の(2)について教えてください。

>>319-320 見てもわからないってこと?

あと option base でぐぐっておけば幸せになれるかもしれない。
0337デフォルトの名無しさん2011/06/11(土) 21:29:55.18
>>333
まさか釣りや煽りの類じゃないだろうな?

     _______                     __
    // ̄~`i ゝ                    `l |
    / /        ,______   ,_____    ________  | |  ____ TM
   | |     ___ // ̄ヽヽ // ̄ヽヽ (( ̄))   | | // ̄_>>
   \ヽ、   |l | |    | | | |    | |  ``( (.  .| | | | ~~
      `、二===-'  ` ===' '  ` ===' '  // ̄ヽヽ |__ゝ ヽ二=''
                         ヽヽ___//   日本
         ______________  __
         |vba 配列                .| |検索|←をクリック!!
          ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄ ̄
         ◎ウェブ全体  〇日本語のページ
0338デフォルトの名無しさん2011/06/11(土) 22:38:09.49
>>336
>>337
ありがとうございました。
(2)    は 0 to 2 って意味なんですね。
0339デフォルトの名無しさん2011/06/12(日) 16:50:56.28
WEBクエリでテーブルの一部分だけを抜き出すことってできますか?
0340デフォルトの名無しさん2011/06/12(日) 17:52:54.53
すいません初心者で質問です。

ボタンを押したときテキストをexcelで読み込み、
線を引いて2箇所ソートを掛けて保存をするものを作りました。
ここで問題なのですが、テキストを読み込んで線を引いて、ソートもOK
で保存もちゃんとできたものは作れました。

ですが、ソートをするときに
ActiveSheet.Range("A2:W500")
.sort key1:O列昇順
key2:G列昇順
この記述を入れているせいで、保存が終了した際にexcelがプロセスに残ってしまっており
2回目の処理を行う際にエラーがおきてしまいます。
プロセスを終了しないとどんどん溜まっていきます。。。

シートにはいくつかデータがあるので、2箇所だけソートを掛けるとほかの
データはソートがかからないので、データがある範囲を指定しています。

何かほかの記述方法はありますか?
宜しくお願いいたします。
0341デフォルトの名無しさん2011/06/12(日) 19:37:25.23
>>340
プロセスに残るって言うことは他の何らかしらからEXCELを操作してるんだよね。
そこで使ってるObjectの設定にもよるだろうから何とも言えないけど、
とりあえずこんなページ見付けたんで参考に。
http://homepage1.nifty.com/rucio/main/technique/teq_15.htm
0342デフォルトの名無しさん2011/06/12(日) 19:39:46.56
>>341
ありがとうございます。
明日会社で試したいと思います。

もしわからなかったら、コードを記述させて頂きますので
どなたか宜しくお願いします・・・
0343デフォルトの名無しさん2011/06/12(日) 21:35:20.56
>>340
setステートメントでワークブックを掴んだら、参照をきちんと解放しろ
どのオブジェクトでも同じだ

set myWorkbook As Workbook
(略)
set myWorkbook = Nothing
0344デフォルトの名無しさん2011/06/12(日) 22:03:48.19
>>343
>set myWorkbook As Workbook

Dim じゃねーのか?
0345デフォルトの名無しさん2011/06/12(日) 22:15:40.44
>>344
すまんCreateObjectのから消したからミスった
0346デフォルトの名無しさん2011/06/12(日) 23:21:25.50
WorkbookやWorkSheetのオブジェクトは、わざわざNothing代入しなくても変数スコープが外れた時点で参照は解放されるよ
これは、どのオブジェクトでも同じだ

もちろん「変数スコープが外れた時点で」なので、モジュールレベルでオブジェクト変数を宣言している場合は
処理を終えても(プロシージャを抜けても)参照は保持されたままなので、解放したければNothing代入する必要があるが
プロシージャレベルでの宣言なら処理を終えたら(プロシージャを抜けたら)、Nothing代入を記述しなくても、
自動的にNothing代入と同じ処理が入る

問題なのは「参照」ではなく「プロセス」の方で、主にActiveX.dllではなくActiveX.exeの場合に起こる
これらはQuit、Exit、Close、Terminateなどの終了や閉じる系のメソッドを実行してやらないと
参照は解放されているのにプロセスが残るという事態が起きる

この問題は、Nothing代入して参照をきちんと解放したところで解決しないどころか
Nothing代入しちゃうと、当然ながらQuitもCloseも出来なくなっちゃうので、そんな無駄な解放処理やるまえに
きちんと終了処理を行わないとダメだ
0347デフォルトの名無しさん2011/06/12(日) 23:41:57.11
>>346
Excelに限定される話じゃないけど、暗黙で生成されたオブジェクトを掴んだ場合、
明示的に解放する手段なくない?
0348デフォルトの名無しさん2011/06/13(月) 04:11:44.87
だからVBAにDisposeはないって
言ってるじゃないですかァーッ
0349デフォルトの名無しさん2011/06/13(月) 05:21:59.77
円のオートシェイプ表示まではできたけど、表示した円に文字入力するのがわからないです
0350デフォルトの名無しさん2011/06/13(月) 07:37:47.00
つ マクロの記録
0351リアル問題マソ 2011/06/13(月) 08:17:04.29
以前プロシージャレベルでもNOTHING入れるのが礼儀とか怒られたぜ!
0352デフォルトの名無しさん2011/06/13(月) 09:19:31.44
参照先をオブジェクトからnotingに入れ直すだけで、一度捕らえたオブジェクトはGC以外では解放されない仕様じゃなかったっけ
0353デフォルトの名無しさん2011/06/13(月) 13:39:31.81
>>349
Shapes.Characters.Text

>>350
2007だとオートシェイプ関係は記録できないことがある
0354デフォルトの名無しさん2011/06/13(月) 15:02:10.11
>>351
それが正解。
基本的にスコープが切れた所で開放されるけど、
場合によってゴミが残ってメモリリークが発生する事がある。
0355デフォルトの名無しさん2011/06/13(月) 15:04:35.60
ない
終了
0356デフォルトの名無しさん2011/06/13(月) 16:02:26.18
無いと言うのと知らないと言うのは違う。
0357デフォルトの名無しさん2011/06/13(月) 16:04:51.82
>>356
ねーよ
0358デフォルトの名無しさん2011/06/13(月) 16:25:19.59
なんでもかんでも最後にNothingするのはプロが無駄に記述量を増やすために書くってのが多い。
プロはわざと冗長に書くことがある。
アマチュアは無駄なことは書かずに最短距離でいきましょう。
ExcelのVBEのプロシージャレベルのRange型とかWorksheet型なんて100%書く必要はない。
0359デフォルトの名無しさん2011/06/13(月) 18:24:59.12
すいません。
セレクトセルが移動していっても、
元をたどれると便利なので、

セルアドレス = Selection.Address()

Range("セルアドレス").Select


とよくやって元を辿るのですが、

Range("セルアドレス").Select

の部分で理由は分からないのですがエラー(デバック)になって、
これを使えない時があります。

何かルールがあるのでしょうか?

EXCE2000 WindowXPです。
0360359です。例えば・・・2011/06/13(月) 18:32:53.35
Sub 1回追加()

If ActiveCell.Offset(0, -1).Range("A1").Value = "250" Then

  セルアドレスA = Selection.Address()

ActiveCell.Offset(0, -23).Range("CX1").Select 'ActiveCell.Offset(0, -23)で一番左端の列Aに移動。CXは両建判別列
Select Case Selection.Value

Case 1

Range(セルアドレスA).Select
ActiveCell.Offset(0, -23).Range("W3:DH3").Select
Selection.Insert Shift:=xlDown
Selection.Insert Shift:=xlDown
Range(セルアドレスA).Select
Application.Run "売りに買いで両建2回トレードに変更"

↓が選択され次のマクロに移り================

Sub 売りに買いで両建2回トレードに変更()

セルアドレス = Selection.Address()

Worksheets("倉庫").Select
Range("DT33:DW53").Value = ""
Worksheets("損益").Select
Range("セルアドレス").Select   ←ここでエラーになってしまいます!
0361デフォルトの名無しさん2011/06/13(月) 19:04:14.02
>>360
セルアドレスの中身見てみ
原因がわかるよ
0362デフォルトの名無しさん2011/06/13(月) 19:06:14.89
>>358
なにか問題起こされると困るし
かといっていちいち細かく説明するのも面倒だから
とりあえずやっとけって言うやつが諸悪の根源
0363359です。例えば・・・2011/06/13(月) 19:14:57.33
>>361
分かりました!有難うございます!
元々選択されているのに再度選択していました!
0364デフォルトの名無しさん2011/06/13(月) 19:27:36.15
いや、その程度の知識しか持ち合わせていないなら
とりあえずNothingは付けておいた方がいい。
開放されるのが分かってて付けないなら構わないが。
0365デフォルトの名無しさん2011/06/13(月) 19:34:14.17
>>364
お前がもっと勉強しろ
0366デフォルトの名無しさん2011/06/13(月) 19:40:50.83
うむ
0367デフォルトの名無しさん2011/06/13(月) 19:42:00.95
>>363
本当にそれが問題か?
0368359です。例えば・・・2011/06/13(月) 19:47:15.68
>>367
すいません。考えたのですが分からないのです。
教えてください。
0369デフォルトの名無しさん2011/06/13(月) 19:57:52.07
>>368
Range("セルアドレス").Select

Range("セルアドレス).Select
0370デフォルトの名無しさん2011/06/13(月) 19:59:00.15
>>369
Range("セルアドレス).Select

Range(セルアドレス).Select
0371デフォルトの名無しさん2011/06/13(月) 20:19:34.02
>>365
まだ分からないのか。
開放されない事象が有るから言ってるんだ。
人に勉強とやかく言う前に本当にそういう事象が無いのか確認してから言ってくれ。
それが出来ないなら迂闊にないなんて言わない方がいいし、
人に勉強しろなんて言うのはもっての他だ。
0372デフォルトの名無しさん2011/06/13(月) 20:34:56.40
>>371
まあまあ、そんなに怒ることでもないわさ。
私も一つ知ってるけど、言うと荒れそうだから黙ってるわさ。
0373デフォルトの名無しさん2011/06/13(月) 20:49:42.27
>本当にそういう事象が無いのか確認してから
これって不可能じゃないかな?

発生する事象をだしてもらえれば話が早いのに…
0374デフォルトの名無しさん2011/06/13(月) 20:50:31.43
>>371
>>372
だからないって
0375デフォルトの名無しさん2011/06/13(月) 20:51:24.10
>>373
悪魔の証明
0376デフォルトの名無しさん2011/06/13(月) 20:56:18.90
まぁ、お前らそう興奮して反応するなって。
別にしらねぇならそれでいいじゃないの。死ぬわけでもなし
0377デフォルトの名無しさん2011/06/13(月) 21:01:37.77
この不況下じゃその油断が野垂れ死にを招く
0378デフォルトの名無しさん2011/06/13(月) 21:04:04.74
>>372
再現可能なら荒れないよ
今は「ある」「ない」の水掛け論だから荒れてんの
0379デフォルトの名無しさん2011/06/13(月) 21:07:47.84
循環参照の例は常識だから不適
0380デフォルトの名無しさん2011/06/13(月) 21:10:04.44
>>379
常識でも何でもないと思うが。
ならばNotingを付けるのも常識だろう。
0381デフォルトの名無しさん2011/06/13(月) 21:11:58.65
>>380
Nothingつけただけじゃメモリリークする
馬鹿は黙ってろ
0382デフォルトの名無しさん2011/06/13(月) 21:13:58.87
> 基本的にスコープが切れた所で開放されるけど、
> 場合によってゴミが残ってメモリリークが発生する事がある。

> 基本的にスコープが切れた所で開放されるけど、
> 場合によってゴミが残ってメモリリークが発生する事がある。

> 基本的にスコープが切れた所で開放されるけど、
> 場合によってゴミが残ってメモリリークが発生する事がある。
0383デフォルトの名無しさん2011/06/13(月) 21:14:11.42
すいません、やはりわからなかったので教えてください・・・

'エクセル起動
Set a_xls = New Excel.Application

With a_xls.Application
.Workbooks.OpenText _
     〜省略〜
FieldInfo:=Array( _
Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2))

ActiveSheet.Range("A2:W500") _
.Sort Key1:=Range("O2"), order1:=xlAscending, _
Key2:=Range("G2"), order2:=xlAscending
End With

.ActiveWorkbook.SaveAs FileName:= _
Replace(strFileNm, ".txt", ".xls"), FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False

End With

a_xls.Quit
Set a_xls = Nothing

こう書いているのですが、ソートを掛けるところを記述すると
excelが終了せずプロセスに残ったままになってしまいます。

何か書き方などアドバイスいただけませんか。お願いします
0384デフォルトの名無しさん2011/06/13(月) 21:21:45.38
何だ、循環参照の話が出たから分かってるのかと思ったが全然分かって無かったみたいだな。
なら俺が説明しても理解出来ないかも知れないな。
0385デフォルトの名無しさん2011/06/13(月) 21:27:44.33
>>377
厳しい世界…なんだ、な
0386デフォルトの名無しさん2011/06/13(月) 21:31:38.96
> 常識でも何でもないと思うが。
> ならばNotingを付けるのも常識だろう。

> 常識でも何でもないと思うが。
> ならばNotingを付けるのも常識だろう。

> 常識でも何でもないと思うが。
> ならばNotingを付けるのも常識だろう。
0387デフォルトの名無しさん2011/06/13(月) 21:34:47.15
>>354=>>356=>>364=>>371=>>376=>>380=>>384
0388デフォルトの名無しさん2011/06/13(月) 21:39:07.64
>>386
はずかしい><
0389デフォルトの名無しさん2011/06/13(月) 21:43:46.71
オブジェクトの参照って次の理解でいい?

オブジェクトは変数に参照を設定することで使用できるようになる。
変数のメモリアドレスにオブジェクトへ参照アドレスが確保され、
処理の際に変数→メモリ→オブジェクトの呼び出しが行われる。

呼び出されたオブジェクトの実体は、利用しなくなったらシステム側が回収
(おかしな挙動しないようにしまっちゃう)する。

変数にNothingをセットすると、変数の持つメモリアドレスが無しに書き換える。
これにより、変数へのアクセスにより、不要なオブジェクトの呼び出しが無くなる。

つまり、変数の持つメモリアドレスをクリアし、オブジェクト召還を変数から出来なくするが、
実体の回収を保証するものではない。
0390デフォルトの名無しさん2011/06/13(月) 21:44:59.10

初心者なのだけど、

Excel VBA で書いたプログラムの拡張子は、どんな文字なのかオセーテ!
0391デフォルトの名無しさん2011/06/13(月) 21:44:59.80
>>383
>Set a_xls = New Excel.Application

新しいブックオープンするんじゃダメなん?
0392デフォルトの名無しさん2011/06/13(月) 21:47:29.79
>>390
えくすぽーとしてみたまえ
0393デフォルトの名無しさん2011/06/13(月) 21:48:41.52
>>390
.vba
0394デフォルトの名無しさん2011/06/13(月) 21:49:12.10
>>389=
>>354=>>356=>>364=>>371=>>376=>>380=>>384
0395デフォルトの名無しさん2011/06/13(月) 21:51:37.82
>>394
IDも見れないのと思ったがここ出ないんだった

とりあえず内容みような、言ってること違うから、多分
0396デフォルトの名無しさん2011/06/13(月) 21:54:17.60
>>395
15分待ってやるよ
0397デフォルトの名無しさん2011/06/13(月) 21:55:30.55
?
0398デフォルトの名無しさん2011/06/13(月) 21:58:28.51
やれやれだ。
ここまで>>386-388みたいに煮えくり返っている奴に説明するのも馬鹿馬鹿しいな。
人の話を聞かないで決めつける時点でプログラマとしての素質が無いと分かってる奴に説明するのも何だしな。
こう言う奴は結局自分で適当に調べて間違った事をずっとそのまま覚えているんだろうな。
お前みたいに失礼な奴に教えるとでも思っているのか?土下座して出直せ。
0399デフォルトの名無しさん2011/06/13(月) 21:58:52.31
>>393
Thanks a lot!
0400デフォルトの名無しさん2011/06/13(月) 22:00:36.88
>>398
Nothingつけただけじゃメモリリークする
馬鹿は黙ってろ
0401デフォルトの名無しさん2011/06/13(月) 22:04:09.61
>>391
前に質問していてその内容が340にあるんですが、

ブックだけを開いてテキストの読み込みは可能ですか。
どうもソートかけるてるところをコメントアウトすると
正常に終了するので、どうしたもんかと試行錯誤しているんですが
よくわからない状態です・・・
0402デフォルトの名無しさん2011/06/13(月) 22:06:54.83
>>400
これでお前はまたひとつ勉強する機会を失った訳だ。
そうやって底辺PGとしてそのまま這いつくばっていればいいさw
0403デフォルトの名無しさん2011/06/13(月) 22:08:31.69
>>402
Nothingつけただけじゃメモリリークする
馬鹿は黙ってろ
0404デフォルトの名無しさん2011/06/13(月) 22:11:04.46
>>401
>ブックだけを開いてテキストの読み込みは可能ですか。
vbaだから、基本的になんでもありだと

ただ、この一文だけじゃなんのことだか?
0405デフォルトの名無しさん2011/06/13(月) 22:13:13.30
クラスやフォームを使わなければ起きない。
0406デフォルトの名無しさん2011/06/13(月) 22:16:10.22
>>405
そうだとすると、私が知ってるのと同じかも知れないわさ。
0407デフォルトの名無しさん2011/06/13(月) 22:19:32.11
GoTo >>351
0408デフォルトの名無しさん2011/06/13(月) 22:20:35.94
>>401
自分のWorkbooksのOpenTextを使えば済む話じゃないのか?
何か妙な勘違いをしている気がする。
0409デフォルトの名無しさん2011/06/13(月) 22:21:03.60
まだ続いてたんか
でNothingしないとメモリリークする例は出たか?
0410デフォルトの名無しさん2011/06/13(月) 22:22:16.09
>>404
ですね、すいません。

と言うか、なんで
ActiveSheet.Range("A2:W500") _
.Sort Key1:=Range("O2"), order1:=xlAscending, _
Key2:=Range("G2"), order2:=xlAscending
End With
ここだけで、プロセスが残ってしまうのが良くわからないんですよね・・・
0411デフォルトの名無しさん2011/06/13(月) 22:47:16.97
>>410
sortは環境によっては、おかしくなることがあるみたい

知らないで書くけど、
最後のquitはcloseじゃダメなん。
0412デフォルトの名無しさん2011/06/13(月) 22:57:25.98
そもそもメモリリークしたかどうかってどうやって調べるのよ
0413デフォルトの名無しさん2011/06/13(月) 23:02:21.95
>>412
長年の経験と勘
単に外部プロセスやOSがキャッシュとして保持している場合があるから難しい
0414デフォルトの名無しさん2011/06/13(月) 23:12:31.57
賢くない人の平凡でしょぼいな回答をありがとう
0415デフォルトの名無しさん2011/06/13(月) 23:17:34.07
しょぼいなってどこの方言?
0416デフォルトの名無しさん2011/06/13(月) 23:26:17.84
>>411
なるほど、どうなんだろう
今は家だからできないんだけど試してみるかな・・・
0417デフォルトの名無しさん2011/06/13(月) 23:38:44.33
>>415
面白い回答をどうぞ
0418デフォルトの名無しさん2011/06/13(月) 23:39:20.29
>>383
このコードみると
With は1個なのに
End With は2個あるけど
コピペミス?
0419デフォルトの名無しさん2011/06/13(月) 23:42:33.24
>>418
はい、すいませんコピペミスと言うか

今日色々やっててその残骸です。無視してください
0420デフォルトの名無しさん2011/06/13(月) 23:42:37.20
省略の部分
0421デフォルトの名無しさん2011/06/13(月) 23:43:46.93
>>417
えぇ?!俺?
0422デフォルトの名無しさん2011/06/13(月) 23:59:20.64
>>421
うむ
おもろー
0423デフォルトの名無しさん2011/06/14(火) 00:26:23.25
>>409
過去レス読んでろノロマ
0424デフォルトの名無しさん2011/06/14(火) 02:13:19.89
例示もソースもコードも貼れないで脳内で完結してるだけなのになんでわざわざ恥をさらしにくるの?
マゾなの?
気持ちいいの?
0425デフォルトの名無しさん2011/06/14(火) 02:31:02.29
ここの奴らはスルースキル低いなw
0426デフォルトの名無しさん2011/06/14(火) 03:26:07.70
俺もUserFormでメモリリークする事例は知ってるが、Nothingとは無関係だしなぁ。
Set *** = Nohingを書かないとメモリリークして、書くとメモリリークしない例は俺は知らない。
0427スーパー問題マン2011/06/14(火) 03:52:05.88
つまりnothingでジェネレーションを下げないとVBAのガベージなんとかが解放してくんないし、
逆にnothingで参照が切れることでガベージなんとかのリストから外れて残る可能性がある

ってことでFA?
0428デフォルトの名無しさん2011/06/14(火) 03:56:49.71
何がFA?
中の細かな動作までわかる奴いないと思うけど
0429デフォルトの名無しさん2011/06/14(火) 04:24:14.86
こんにちは、質問いいですか?

VBAでオブジェクトをシリアライズし文字列をセルに保存することはできますでしょうか?
0430デフォルトの名無しさん2011/06/14(火) 09:45:15.39
Nothing派は旗色悪いな
起死回生でみんなを黙らせる書き込みはないんかな?
0431デフォルトの名無しさん2011/06/14(火) 10:21:45.74
Nothing代入しないで起こる問題は
Nothing代入しても同じように起こる

Nothing代入によって発生しない問題は
Nothing代入しなくても起こらない

プロシージャレベルの参照変数にプロシージャの最後でNothing代入するのは
完全に無意味で、これの有無によって何かが変わることは無い
0432デフォルトの名無しさん2011/06/14(火) 10:24:42.70
俺はnoting派じゃないがnotingは入れてる

条件処理で空else書くのと同じ扱いだな
実際俺が無知なだけで、notingにすばらしい効果があるのかも知れないし
0433デフォルトの名無しさん2011/06/14(火) 10:30:22.49
コードの明示性を上げるために、自動型変換が働くところでも
文字列型変数 = CStr(整数型変数)
とかやるのは無駄じゃないけど、Nothingは無駄以外の何ものでもない
0434デフォルトの名無しさん2011/06/14(火) 12:21:58.97
Application.
とかもその類いだな
でも空elseはNotingと同じじゃんシステム上のメモリリークのリスク回避でなく、コーディングでのリスク回避だと思うんだが

つまりシステム上要請されるコードではなく、規約の上に従う一種のルール
であれば完全否定もするものじゃないな

Notingが明示的な解放ではないと言うスタンスならば
0435デフォルトの名無しさん2011/06/14(火) 12:23:46.95
>>430
何も例を挙げていないのに人の話を聞けとか言うやつしかいないよ
0436デフォルトの名無しさん2011/06/14(火) 12:28:27.19
書いておいてあれだが日本語がひどすぎだわ俺
0437デフォルトの名無しさん2011/06/14(火) 12:56:07.51
同じくnothing は基本的に入れない派なんだが、createobject やnewでインスタンスを新たに生成した場合は最後にnothing をいれるようにしてる。
もしかしてこれも無意味だったりする?
教えてエロい人

0438デフォルトの名無しさん2011/06/14(火) 13:16:38.11
メモリリークってどうやって調べるの?
0439デフォルトの名無しさん2011/06/14(火) 13:28:31.63
無意味がどの意味で使われてるかいまいち
まとめるとこんなかな

宣言する派
│
├宣言したら解放される説
├宣言しても解放されないが、メモリリークリスクが減る説
│├GCが自動的に回収するけど想定外エラーとか困る分派
│└回収されるとは限らないから可能な限り明示する分派
├メモリリークリスクは変わらないけど、コードの明示になる説└みんなしてるじゃん説

宣言しないよ派
│
├┬dirpose実装しろ説
│└参照先が変更されるだけで破棄が保証されないから宣言が無意味じゃん説
├GCにまかせろー(バリバリ)説
├気にするようなシステム作ってないだろ説
├面倒くさい説
├参照先が変更されるだけで破棄が保証されないじゃん説
└ソースよこせ説
0440デフォルトの名無しさん2011/06/14(火) 14:31:20.39
>>438
タスクマネージャで大体分るんじゃない?
0441デフォルトの名無しさん2011/06/14(火) 14:41:09.79
エクセル終了させたら全部解放される程度のことを問題にするな
0442デフォルトの名無しさん2011/06/14(火) 23:43:08.95
質問です
対象はシートが"対象者"、"コピー元"と人名のシートが複数枚あるブックです
人名のシートは"対象者"シートに書かれている人名でシート名が付けられています
対象者のシートには1〜3列目まで人名を含んだ文字列、それ以降の列がデータとなっており、
1列目から3列目までを順にチェックして、一致する人名のシートにその列をコピーしたいです。

そこで処理を記述してみたのですが、コピーを繰り返すうちに
「リソース不足のため、このタスクを完了することができません。
選択するデータを少なくするか、ほかのアプリケーションを終了して再度試してください。
元に戻さずに続けますか?」と出てしまい、処理が終了してしまいます。

検索して同様の事象の対処法として、クリップボードをクリアするために必要なコピー処理の
直後に1つのセルのみコピーする処理やCutCopyMode=Falseにする処理を入れてみましたが
状況は変わりませんでした。

なんらか対処法ご存知の方教えていただけないでしょうか?
04434422011/06/14(火) 23:46:50.21
書いたソースは下記のような感じです(1/2)

Private Sub CreatePersonalSheet()
nCheckColumn= 1
nPersonCnt = ThisWorkbook.Worksheets("対象者").UsedRange.Rows.count - 1
Do While nCheckColumn < 3
nRow = 2
Do While nRow <= nPersonCnt + 1
sPersonSheet= ThisWorkbook.Sheets("対象者").Cells(nRow , 1)
nPersonEndline= ThisWorkbook.Worksheets(sPersonSheet).UsedRange.Rows.count
With ThisWorkbook.Worksheets("コピー元")
.Range("A1").AutoFilter Field:=nCheckColumn, Criteria1:="*" & sPersonSheet& "*"
04444422011/06/14(火) 23:52:56.15
続きです(2/2)

If (.AutoFilter.Range.nCheckColumns(1).SpecialCells(xlCellTypeVisible).count > 1) Then
.Rows(1).Hidden = True
.Range("A1").SpecialCells(xlCellTypeVisible).Copy _
ThisWorkbook.Worksheets(sPersonSheet).Rows(nPersonEndline+ 1)
.Cells(1, 1).Copy
Application.CutCopyMode = False
' 作業シートよりコピー完了した行を削除
.Range("A1").SpecialCells(xlCellTypeVisible).delete
.Rows(1).Hidden = False
End If
.AutoFilterMode = False
End With
nRow = nRow + 1
Loop
nCheckColumn = nCheckColumn - 1
Loop
End Sub

前レスでなぜかインデントが消えてしまいました、すみません
どなたか分かる方見えたらお願いします。
0445デフォルトの名無しさん2011/06/15(水) 01:15:41.49
>>442
    Do While nCheckColumn < 3
        ...
        nCheckColumn = nCheckColumn - 1
    Loop
無限ループしてないか?
04464422011/06/15(水) 01:26:49.22
>>445
そこは実際のソースだと分かりづらい部分があったんで何箇所か修正したときに直し忘れてました
nCheckColumn = nCheckColumn +1ですね
ご指摘ありがとうございます

あと>>442の4行目「対象者のシートには〜」は「コピー元のシートには〜」でした。
間違いが多くてすみません
0447問題マソ2011/06/15(水) 07:44:30.67
ググったらnothingは7年前から議論して結論でてないみたいだぜ

>>446
ちょっとブックうpしてみて
0448デフォルトの名無しさん2011/06/15(水) 07:49:25.77
結論は出てるよ
ただ、悪魔の証明で、Nothing無しでも全てのケースに置いて絶対に問題が「無いという証明」は不可能なので
悪魔の証明ってのを理解してない奴だけが結論出てないと勘違いしているだけ
0449デフォルトの名無しさん2011/06/15(水) 08:12:49.67
最近は礼儀とか作法とか書く馬鹿が減っただけでも少しは向上したのかもね。
0450デフォルトの名無しさん2011/06/15(水) 18:11:04.35
ユーザーフォームを作成してて、
何度か実行していると、突然

指定されたオブジェクトが見つかりません

みたいなエラーがでて、フォームが開けなくなることがあるんですが、
フォームに問題があるのでしょうか?
上書き保存時にもエラーがでることもあります。

コードを新規BOOKに移植しても同じでした。
0451デフォルトの名無しさん2011/06/15(水) 18:41:06.55
ブックあるいは再現する最小のコード、デザインをうp
話はそれからだ
0452デフォルトの名無しさん2011/06/15(水) 18:54:35.56
>>451
特定のBOOKではなく、いくつかのファイルで発生します。
エクセル、OSともに再インストールしたけど、再発しました。

内容は複雑なものではなく、
with構文
Application.ScreenUpdating
txt1.Value = Val(txt2.Value) - Val(txt3.Value)
if Else構文
を使い、
フォームのコンボボックスや
テキストボックスに入力したものを
シートに転記する、といったようなものです。

エクセル2007
Celeron 2.53
MEM 1024M です。
0453デフォルトの名無しさん2011/06/15(水) 19:11:06.50
ユーザーフォームを何度か実行(Show)すると問題が起きるのか
ユーザーフォーム上でなんらかの処理を何度か実行すると問題が起きるのか解らんが
前者なら何のコントロールもコードも乗せてない空のユーザーフォームでも再現するか
後者なら、空のユーザーフォームにボタンを1つ配置して、コードは書かずにそれを
何度か押すだけでも再現するか確認しろ

これで問題が再現するなら、MSにバグ報告しな
これで問題が再現しないなら、コードに問題があるわけだから
問題が再現する最小のコードをきちんと探って
変に略したりせずに書くように
0454デフォルトの名無しさん2011/06/15(水) 19:13:40.51
>>448
Nohitng付けとけ派は
事実と推論できるものが証明できるかどうかを問題にしてるんじゃない
事実として良いかを問題にしてるんだ

VBAの実行環境に対する信頼性の問題だよ
0455デフォルトの名無しさん2011/06/15(水) 20:10:51.67
今日初めてユーザーフォームの存在を知ったが、
汎用性はありそうだけど、
繰り返し処理に弱そうなイメージなんだがどう思う?
0456デフォルトの名無しさん2011/06/15(水) 20:11:46.31
>>455
余裕
0457デフォルトの名無しさん2011/06/15(水) 21:50:41.90
>>452
似たような症状になったことある。
どういう基準でなるかわからなかったけど、
ユーザーフォームをデバッグしてると、急に
パスが見つかりません、みたいなエラーがでる。
ツリーでひらいても、同じでひらけない。

ぐぐっても、ユーザーフォームがなにか悪さしてる、
程度しかわからなかった。

0458デフォルトの名無しさん2011/06/15(水) 22:43:34.39
「時間指定によるマクロの実行のご質問お願いします(エクセル2003)」
「A1に 23:00:00と入力し B2からB11に 101から110までの数字を入力しています
右隣(C2)に数字をコピーするマクロですが下記のようにマクロ記録終了いたしました」

Sub 時間ですコピーです()
'
' 時間ですコピーです Macro
'

'
Range("B2:B11").Select
Selection.Copy
Range("C2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("A2").Select
End Sub

「毎日A1表示時刻に実行するマクロを下記の通りやってみましたが指定時間に実行できません」


Sub 時間ですコピーです()
'
' 時間ですコピーです Macro
間省略
Application.CutCopyMode = False
Application.OnTime TimeValue("A1"), "時間ですコピーです"
End Sub
「ご指導の程お願いします」

0459デフォルトの名無しさん2011/06/15(水) 22:53:09.77
Workbook_Openに無限ループで書くか
タスクを使う
0460デフォルトの名無しさん2011/06/15(水) 23:07:19.71
>>458
Application.OnTime TimeValue(Range("A1")), "時間ですコピーです"
じゃね?
0461デフォルトの名無しさん2011/06/15(水) 23:11:29.15
>>460あほか
0462デフォルトの名無しさん2011/06/16(木) 00:23:51.75
実用性で考えたらタスクだろうね。
>>459の人が言ってる様にタスクで立ち上げて
Workbook_Openに処理を書き込む様にすれば大丈夫。
最後にブックを保存して閉じることを忘れずに。
0463デフォルトの名無しさん2011/06/16(木) 08:30:13.09
>>459 462
ありがとうございます タスクの意味があまり分かっていませんで
一度くぐってやってみます
0464デフォルトの名無しさん2011/06/16(木) 10:04:59.11
質問させてください。
マクロでシートの中の「"」を一度に消したいのですが、文字列として認識してくれないため行き詰まっています。
手動の置換でなら出来るのですが、マクロで処理する方法があればご教授ください。
よろしくお願いします。
0465デフォルトの名無しさん2011/06/16(木) 10:26:14.91
>>463
コントロールパネル開いてごらん
0466デフォルトの名無しさん2011/06/16(木) 10:27:33.42
>>464
エスケープシーケンス
文字コード
おすきにどうぞ
0467デフォルトの名無しさん2011/06/16(木) 10:51:40.71
>>465
はい やってみました
タスクと言うところクリックして タスクの追加とか・・・ありますね
初めて開きました  お昼休みに一度やってみます

何度もありがとう
0468デフォルトの名無しさん2011/06/16(木) 10:53:31.08
>>464

testしてないけど

Replace(Cells(n, n), Chr(34), "")とかは?

Chr(34)は半角 "
0469デフォルトの名無しさん2011/06/16(木) 12:57:54.54
>>464

Cells.Replace What:="""", Replacement:=""
0470デフォルトの名無しさん2011/06/16(木) 15:33:22.65
フォームのコンボボックスのオブジェクト名を
一括で変更するにはどうしたらいいでしょうか?

cbo内容1 〜 cbo内容10
と連番にしたです。
0471デフォルトの名無しさん2011/06/16(木) 15:49:59.61
全部ならeach
0472デフォルトの名無しさん2011/06/16(木) 15:53:24.87
>>466>>468>>469
返信ありがとうございます。
しかし、何度やってもダメでした。
VBのバージョンが6.5なのですが、古くてダメなのでしょうか。
0473デフォルトの名無しさん2011/06/16(木) 16:08:42.34
>>472
バージョンに限らず駄目でしょう。
あれの扱いは文字列ではありません。
0474デフォルトの名無しさん2011/06/16(木) 16:14:54.76
ごめん、頭のシングルクォートと間違えた
0475デフォルトの名無しさん2011/06/16(木) 16:15:29.56
フォームって言っても
フォームツールなのか、ユーザーフォームなのかで
話は変わってくるわけだが
0476デフォルトの名無しさん2011/06/16(木) 16:16:15.85
>>475
ユーザーフォームです
0477デフォルトの名無しさん2011/06/16(木) 16:32:47.17
Call Cells.Replace("""","")

でも駄目?>>469の人の書き方ちょっと変えただけだけど。
0478デフォルトの名無しさん2011/06/16(木) 16:47:21.02
VBなんちゃらとかchr使うとかなかったっけ
0479デフォルトの名無しさん2011/06/16(木) 17:00:19.20
タブオーダーってすごく使いにくいですね。
表みたいに配置したテキストボックスが
40個とかあったら、大変。
D&Dとかソートでできたら楽なのに。

みんなは一個ずつちまちま移動しているのですか?
0480デフォルトの名無しさん2011/06/16(木) 17:14:45.75
>>477
やはりダメなようです。
他の文字ではちゃんと処理してくれるのでプログラムは合っているのですが
ダブルクォーテーションだけが処理してもらえません。
0481デフォルトの名無しさん2011/06/16(木) 17:33:33.40
ダメだって単に言われてもな。

どのようにコーディングしてどのようにダメなのか実例を示してくれ
0482デフォルトの名無しさん2011/06/16(木) 17:52:33.77
http://www.moderns.co.jp/blog/category.php?k=Windows
この状況によくなるんだけど、解決方法はないんですか?
0483デフォルトの名無しさん2011/06/16(木) 19:04:28.87
宜しくお願いします。

例えばIf〜文の条件式で(必ずしもifでなくてもOKです)、
真であれば

次の行のプログラムをEnd subまで読み込まない。

または、

指定した行のプログラムまで読み込まずにジャンプする。

というようなことは出来ないでしょうか?
宜しくお願いします。

Windows XP EXCEL2000です。

0484デフォルトの名無しさん2011/06/16(木) 19:13:09.45
if false then
なんたら
endif
0485デフォルトの名無しさん2011/06/16(木) 19:24:21.23
>>483
>次の行のプログラムをEnd subまで読み込まない。

どう使いたいのかがよく分からないけど、フラグ設けて再帰するとか?

>指定した行のプログラムまで読み込まずにジャンプする。

GOTO文があるけど、これの多用はお勧め出来ない。
If文のネスト加減で難しいならこれもやっぱりフラグ設けてその分岐で目的の行に
飛ばした方がいいと思うよ。
0486デフォルトの名無しさん2011/06/16(木) 20:07:38.82
>>481
すみません、言葉が足りないようでした。
例えば、>>477さんのプログラムを実行すると、何も変更されないままプログラムが終了するのです。
ダブルクォーテーション以外の文字を指定するとちゃんと置換されてプログラムが終了します。
0487デフォルトの名無しさん2011/06/16(木) 20:35:40.61
Call Cells.Replace(""","")だろ低脳共
0488デフォルトの名無しさん2011/06/16(木) 20:36:54.82
怨エラーなんちゃら

chr(34)
0489デフォルトの名無しさん2011/06/16(木) 20:57:24.02
Excel2007/2010 で、vba側から条件付き書式を4つ作ると
最上位にあるプロパティがコード側から
うまく操作できないぽい。既出でしょうか? orz
ウォッチウィンドウでSelection.FormatConditionsを見ると
Item1とItem4のFormula1が同じ値になってる。
Item1の方の.font.colorとか.font.colorindexを変化させても
反映されない。Item4側が変化したりする。
0490デフォルトの名無しさん2011/06/16(木) 21:03:28.53
>>487
それ、>>477と何が違うの?
0491デフォルトの名無しさん2011/06/16(木) 21:06:35.78
>>490
老眼がきてんのか?おっさん
0492デフォルトの名無しさん2011/06/16(木) 21:14:18.66
Call Cells.Replace("""","")
Call Cells.Replace(""","")
なるほど、ダブルクォートが3つか。

ドヤ顏のとこ悪いけど、それじゃ走りもしないよん。
0493デフォルトの名無しさん2011/06/16(木) 21:21:37.32
>>486
俺はちゃんと置換されるが?
0494デフォルトの名無しさん2011/06/16(木) 22:30:48.07
>>493さんが成功していて>>486が失敗してんだから
>>486の書き方に間違いがあるんでしょ。

ごちゃごちゃ言わずにさ、その部分どういうふうに書いているのかサンプルのデータと一緒にここに書いてみたら?
あれこれ言ってるよりその方がよっぽど早いでしょ。
0495デフォルトの名無しさん2011/06/17(金) 00:04:44.82
>>494
失礼しました。
以下のデータになります。

エクセルのシートは「”あ”」のようにダブルコーテーションでくくってある文字の集合です
試しにシートのダブルコーテーションを全角から半角に書き直し、
Macro2の「Chr(&H8168)」を""とすると、消すことが出来ました。
しかし全角の”を消すことができません。


Sub Macro1()
'
' Macro1 Macro
'
'
Cells.Select
Call Cells.Replace("chr$(&H8168)", "")
End Sub

Sub Macro2()
'
' Macro2 Macro
'

'
Cells.Select
Selection.Replace What:="Chr(&H8168)", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub
0496デフォルトの名無しさん2011/06/17(金) 00:07:05.35
>>495
"”"
0497デフォルトの名無しさん2011/06/17(金) 00:30:23.09
ぜwwwんwwwかwwwwくwwwww
0498デフォルトの名無しさん2011/06/17(金) 00:31:14.20
>>495
ありがとうございます
0499デフォルトの名無しさん2011/06/17(金) 00:41:12.66
全角のダブルクォーテーション…

書かなきゃいいじゃんww
0500デフォルトの名無しさん2011/06/17(金) 01:01:08.59
システム作るときならまあ、ユーザー入力だから想定はするけど・・・
質問で全角とは予想GUY
0501デフォルトの名無しさん2011/06/17(金) 01:03:05.83
>>464
> マクロでシートの中の「"」を一度に消したいのですが
0502デフォルトの名無しさん2011/06/17(金) 01:34:17.77
久しぶりによくで来た釣りだったな
05034422011/06/17(金) 03:41:09.22
コピーを繰り返すとリソース不足でエラーが発生する件で相談中だったものです。
事象の再現するようにテストデータとブックを作りました。
下記のURLから取得してみていただけないでしょうか?

ttp://www1.axfc.net/uploader/Sc/so/245613
DLキーは[VBA442]です

どなたか力を貸していただけると助かります。
0504デフォルトの名無しさん2011/06/17(金) 04:45:19.74
Copyではなく
Value = Valueによる代入にしたらエラー出なかったし
Copyの場合の「実行〜エラー」までより遙かに短い時間で全処理終わったよ
0505エスパーマン2011/06/17(金) 04:49:53.92
同レベルなので初見でエスパー余裕でした
0506デフォルトの名無しさん2011/06/17(金) 15:32:49.48
マクロを実行した時に指定したセルの中身が、
例えばA1の中身が「あ」なら終了して、それ意外なら実行するという様なコードを教えてください
0507デフォルトの名無しさん2011/06/17(金) 17:09:59.17
これは流石にどう見ても釣り
0508デフォルトの名無しさん2011/06/17(金) 18:54:18.09
>>507
分からないならそう言えよ
0509デフォルトの名無しさん2011/06/17(金) 18:58:24.68
If Worksheets("sheet1").Cells(1, 1).Value = "あ" Then
Exit Sub
Else
〜
End If


これで満足したか? >>508
0510デフォルトの名無しさん2011/06/17(金) 19:07:39.42
>>506の切り返しに期待
0511デフォルトの名無しさん2011/06/17(金) 19:08:38.13
誤字に突っ込めよ
0512デフォルトの名無しさん2011/06/17(金) 20:14:46.42
>>506
「あ」じゃないときだけ実行すれば、「あ」のとき終了と同じことになる。
0513デフォルトの名無しさん2011/06/17(金) 20:23:36.82
>>512
506レベルなら「では"あ"ではないってどうやって(ry」になるんじゃね
05144422011/06/17(金) 20:55:52.08
>>504
出来ました、ありがとうございます

しかし原因がよく分からなかったのですが、今回のようにフィルターかけて可視領域だけを
コピーするような連続領域でないコピーみたいな特殊な処理はCopyは使わないほうがよいということですか?
0515デフォルトの名無しさん2011/06/17(金) 21:08:10.51
て言うか>>508みたいな反応に驚いたw
マジだったんだ。すまんかったな。
0516デフォルトの名無しさん2011/06/17(金) 21:14:11.34
ユーザーフォームに
リストボックスとボタンを置いて

ボタンに
Private Sub CommandButton1_Click()
Me.ListBox1.ListIndex = -1
End Sub
と書くと選択が解除されるのですが

リストボックスに
Private Sub ListBox1_Click()
Me.ListBox1.ListIndex = -1
End Sub
と書くと選択が解除されません。

これどうやったら選択解除出来ますか?
0517デフォルトの名無しさん2011/06/17(金) 22:47:14.19
>>516
何がしたいんだ?
0518デフォルトの名無しさん2011/06/17(金) 23:06:55.55
押し間違えさせない為に
奇数行に線(---------------------)を入れてて
それをクリックした時に選択状態にしない様にしようと
思ってやってみたんですが解除出来なくて。
飾りじゃない行をクリックしたら値をシートにセットして
アンロードする様にしています。
見栄えの問題なので絶対必要って訳じゃないんですが。
0519デフォルトの名無しさん2011/06/17(金) 23:43:23.81
Meをフォーム名にしてみても動かない?
0520デフォルトの名無しさん2011/06/17(金) 23:49:59.23
とグルボタンで
デフォルトがoff(押し込まれた状態)の状態
にする方法ってある?
0521デフォルトの名無しさん2011/06/18(土) 00:12:12.06
>>520

UserForm1.ToggleButton1.Value = True
UserForm1.show
かな?かな?
0522デフォルトの名無しさん2011/06/18(土) 00:24:01.87
>>521
フォームを使わず、
Sheet1にActiveXコントロールのToggleButtonをつかった場合です。
したがって、Sheet1にコードを書いた場合です。
05235202011/06/18(土) 00:27:21.90
訂正
ToggleButtonで
デフォルトがon(押し込まれた状態)にする方法ってある?
フォームを使わず、
Sheet1にActiveXコントロールのToggleButtonをつかった場合です。
したがって、Sheet1にコードを書いた場合です。

0524デフォルトの名無しさん2011/06/18(土) 01:03:15.72
>>514
原因は「可視領域のコピー」にある

例えば、300件のデータがあって、そのうちフィルタを抜けて表示されたセル(行)が10件あったとしよう
あのコードでコピーされる行数は何行?

おそらく君は10行がコピーされると思ってるのだろう
しかしそれは間違いで、正しくは2003以前なら「65536-300+10 = 65246行」だ
だって、データが入ってない301〜65536行目も「可視領域」だろ
六万数千行もの膨大な範囲のコピーを数百回繰り返せば、流石にリソース不足にもなるさ
こんなのは、予備知識が無くてもデバッグ出来る奴ならすぐに気付くこと
だって、各処理の戻り値や変数の変化や内容を確認するという、一番初歩的なデバッグで気付けるから

「可視領域のコピー」ではなく「可視領域『かつデータが入っている領域』のコピー」あるいは
空セルを非表示にした上での「可視領域のコピー」なら、コピー処理でもエラーにはならないはず
まあ書式不要なら、Value = Valueの方が良いとは思うけどね

とりあえず、まともにデバッグが出来ないうちは、どんなに複雑なコードが書けても
「プログラムが組める」「VBAが使える」うちには入らないので、デバッグの仕方はきちんと身につけましょう
このくらいの単純で短い処理ならいいけど、もっと複雑で長い処理になると、
こういうスレで金を貰える訳でもない赤の他人らは、面倒がって相手にしてくれなくなるよ
0525デフォルトの名無しさん2011/06/18(土) 01:25:47.00
>>518
ググったんだけど
ClickイベントをMouseUpイベントにしたらできたよ
例えば、リストボックスのValueが"-----"ならListIndex=-1
とか
0526デフォルトの名無しさん2011/06/18(土) 01:50:15.08
>>525
出来ました!ありがとうございます
0527丸投げ請負マン2011/06/18(土) 06:27:00.34
丸投げこいや!!
0528デフォルトの名無しさん2011/06/18(土) 06:31:45.94
こいと言っても、君のレベルじゃまともなもの作れないでしょ
0529デフォルトの名無しさん2011/06/18(土) 08:27:29.63
>>523
右クリック→プロパティでTrueにしたら出来たけどさ

(excel2007)
0530デフォルトの名無しさん2011/06/18(土) 10:12:21.87
OS:Windows2000
ExcelVer:Excel2003質問させてください。
処理の高速化が目的です。

ブックA1〜ブックAnまでに書かれた同一フォーマットのデータを
ブックBに集計しています。

Bに書かれたマクロで、現在Workbooks.openメソッドを使ってA1〜Anを参照しているのですが、
Workbookオブジェクトをopenせずに参照する方法はないでしょうか。

よろしくお願いします
0531デフォルトの名無しさん2011/06/18(土) 10:33:01.55
あるjpeg画像をサイズ変更して新しいファイルに出力しなおす、ってexcel vbaでできますか?
0532デフォルトの名無しさん2011/06/18(土) 11:00:44.25
できる
0533デフォルトの名無しさん2011/06/18(土) 11:19:23.50
>>530
ある
0534デフォルトの名無しさん2011/06/18(土) 20:07:18.88
>>483
です。
遅レスすいません。

>>484
>>485
有難うございます。
if false then
と
GOTO文を組み合わせることで解決できました。
感謝です。
0535デフォルトの名無しさん2011/06/18(土) 21:05:58.03
>>534
それは駄目だ
GOTO文を使わなくていいように考え直せ
0536デフォルトの名無しさん2011/06/18(土) 21:40:29.90
エクセルのVBA初心者が見る参考書でお勧めはなんでしょうか?
プログラム言語は全くわかりません。エクセルのVBA以外は扱えます。
0537デフォルトの名無しさん2011/06/18(土) 21:50:43.35
>>536
Excel VBAデバッグ編 実践のツボ(九天社)

もう会社なくて絶版だけどまだ十分見つかると思う
自称初心者は是非買っとけ
0538デフォルトの名無しさん2011/06/18(土) 23:13:07.25
エクセルのVBA以外は使える…
0539デフォルトの名無しさん2011/06/19(日) 00:04:43.31
>>536
参考書?
参考書もいいけど、VBAに限らずMicroSoftの製品はまず見ておくべき所があるよ。
それはMicrosoft Developer Network、通称MSDNと呼ばれるページ。

たとえばEXCELのVBAならここ。
http://msdn.microsoft.com/ja-jp/library/ee814735.aspx#Y2000

最初は小難しい様に見えるかもしれないけど、よく読み解いて行くと
VBAがどんなものか、かなり手っ取り早く解るはず。
0540デフォルトの名無しさん2011/06/19(日) 00:11:20.67
vbaで2chに書き込むことってできる?
ブラウザ起動してとかじゃなくて
0541デフォルトの名無しさん2011/06/19(日) 00:21:32.48
>>540
つXMLHTTPオブジェクト
0542デフォルトの名無しさん2011/06/19(日) 00:37:45.61
おおちょっと勉強してみます
ありがとうございます
0543デフォルトの名無しさん2011/06/19(日) 00:40:02.83
>>540
出来る、>>541の言うようにXMLHTTP使えばVBSですら出来る。

但し、単純にSendすれば良いだけのところに書き込むよりちょっと難しい。
とりあえずCookieが解ってないと無理。まぁ、それ以前に、単純にSendすれば良いだけの
ところへの書き込み方すら解らないとかなら問題外だけどねw

でもCookie含めたHTTPの基礎知識があれば、CookieにしてもSendするデータにしても
仕様は公開されているから簡単に出来るだろう。

スレ違いなので、具体的な解説はここではできないけどね。
0544丸投げスルーマン2011/06/19(日) 02:26:39.56
やっぱり丸投げはスルーします・・><

>>531
できるぜ!、
変更したいサイズにフォームをセット→GetOpenFilename→LoadPicture→SavePicture
でいけると思う
駄目だったらapiのGetObjectとGetBitmapBitsでフォームの画像データの二次元配列がとれるから、後は気合で

>>536
すげーな
俺なんてなんとかテーブルもワークシート関数もろくに知らないぜ!

>>540
エクセルをブラウザがわりって昔誰かが作ってたぜ!

>>543
Cookieは仕組みがおかしいよなw
俺はFunction CookieWriteとかでググってどっかからコピペしたぜ!
0545デフォルトの名無しさん2011/06/19(日) 12:59:18.76
VBA初心者です。
開発支援ツール(アドインなど)で便利なものがありましたら
教えてください。
0546デフォルトの名無しさん2011/06/19(日) 14:11:07.10
アドインも自分で作ってこそ漢!!
0547デフォルトの名無しさん2011/06/19(日) 14:13:37.68

便利かどうかは個々が判断するものだ

君が何を便利と感じるかなんて知らん

自分で探して自分で便利かどうか試せ
0548デフォルトの名無しさん2011/06/19(日) 15:17:59.11
1             1
2       エンターキー三回で三行分空ける
3
4             2
・      エンターキー四回で四行分空ける
・
・
・

              3
      エンターキー二回で二行空ける
              4

「入力されてるセルを、エンターキー連打すれば連打するだけ空きセルを作る(改行する)」ってな感じの設定にするにはどうすればいいですか?
0549デフォルトの名無しさん2011/06/19(日) 15:21:16.56
EclipseとかのIDEにVBA開発用プラグインとかないのかな?
0550デフォルトの名無しさん2011/06/19(日) 16:14:04.07
>>548
そのワークシートに
押されたキーがエンターキーならば、セルを挿入する(縦にずらす)
というコードを書けば?
0551デフォルトの名無しさん2011/06/19(日) 19:23:20.55
>>550
マクロを利用して作ってみたんですが、エンターキーは無理そうなので、ctrlとxで空欄を作ることができました。
ですが、一つのセルだけにしか効果がないようなので、オートフィルする必要がありそうです。
そして、その方法が分かりません・・・・。>>551は現時点のマクロです。
訂正よろしくお願いします。
0552デフォルトの名無しさん2011/06/19(日) 19:28:34.24
Sub Macro7()
'
' Macro7 Macro
'
' Keyboard Shortcut: Ctrl+x
'
Range("A1:B1").Select
Range("B1").Activate
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("B2").Select
End Sub
なお、熟練者の方々なら見てもらえれば分かるかも知れませんが、ctrlキーとxを押せば「そのとなりのセルも一緒に空欄にする」となっています。
どうかご教授おねがいします。
05535502011/06/19(日) 19:58:37.33
>>551
キー押下げのイベントがないみたいですね。
なので>>550のようにはできませんでした。すみません。

ショートカット登録でよければ、
Selection.Insert
の一文だけでいいと思います。

登録キーはCTRL+xみたいによく使うのはやめた方がいいです。
例えばCTRL+Shift+Iとかにすればいいと思います。
0554デフォルトの名無しさん2011/06/19(日) 19:58:46.10
>>549
ある
0555デフォルトの名無しさん2011/06/19(日) 20:00:02.90
>>554
どこにあるの?
0556デフォルトの名無しさん2011/06/19(日) 20:01:28.65
押入れにしまってたはず
0557デフォルトの名無しさん2011/06/19(日) 20:34:44.43
>>551
>>553の人が言ってるのをパクってEnterキーでやるやつに挑戦してみたわさ。

VBEで
シート側に記述
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call hoge
End Sub

標準モジュール側に記述
Option Explicit

Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long

Sub hoge()
On Error GoTo Err_Handler
If GetAsyncKeyState(vbKeyReturn) Then
ActiveCell.Insert
End If
Exit Sub

Err_Handler:
Call MsgBox("もう入れられません><")
End Sub

結構適当だから何か起こるかも知れないわさ・・・
0558デフォルトの名無しさん2011/06/21(火) 00:18:05.28
ユーザーフォームを見やすく作るのには
textboxのスタイルや
BackColorとかフォントとかどんなのが定番なんですか?

ネットにもなかなか参考になるレイアウトがなくて。
0559デフォルトの名無しさん2011/06/21(火) 00:21:22.76
設定ファイルから読み取るようにして
利用者に任せる
0560デフォルトの名無しさん2011/06/21(火) 00:42:41.20
とりあえず文字をでかくして、容赦なくボタンに色をつける。
下手に小奇麗なデザインより、利用者を最優先する思い切った作りの方が
意外と喜ばれる事が多い。
0561デフォルトの名無しさん2011/06/21(火) 23:53:28.36
>>560
フォーム自体の色(背景色)って
グレー系のほうがいいのか迷う俺はどうしたらいいですかね?
どれが視認性いいんだろ。
突き詰めるとカラーコーディネーターとかになるんだろうけど。

テキストボックスは、昔ながらのへっこんだ感じがいいのか、(Falseのときは透過にする)
時代は、フラットな感じなのかわからない。
0562デフォルトの名無しさん2011/06/22(水) 00:42:43.63
何のツールかによるな。
身内で使うツールなんかだったら色は自分の好みとセンスでってところはあるけど、
銀行系の上流システムに取り込まれるファイルを出力する様な、上流のユーザーさんが使うツールとかだったら
思いっきり地味に作って無難にしておくかな。
ボタンの配置は作業手順に併せて、ボタンの大きさとフォントは統一するか、
特によく使うボタンは大き目に作っておくかってくらいだけど、
まぁあくまで自分だったらと言う話だけど、制約が無ければ折角のEXCELなんで
フォームは使わないでシートを駆使するかな。
バリデートは出来る限りシートの数式に仕込んで集約したセル1こ見ればいい様にしたいし、
ボタンもシェイプにしといてリボン型とかにしとくと大分イメージが変わるし。
0563デフォルトの名無しさん2011/06/22(水) 01:15:37.41
>>562
営業・売上日報や請求明細書関連です。
自分でつくって、せいぜい3人程度でしか使わないなら、シート使ったほうがいいのかな。
必死に勉強してフォームとかクラスとかできるようになってきたんだが。

シート駆使ってどんな感じなのですか?
0564デフォルトの名無しさん2011/06/22(水) 01:24:24.97
>>562
入力フォームを処理をシートで済ませるってことですか?
たしかにフォームで、テキストボックスを表状に並べたりしましたが
見にくいなって思ってました。

複数行ある上記のテキストボックスの表の各行の合計を自動で計算するのに
クラス勉強したり。

やればやるほどフォームの利点がわからなくなってきました。
エクセルVBAのユーザーフォームの利点ってなにかあるんでしょうか?
0565デフォルトの名無しさん2011/06/22(水) 02:09:20.99
>>564
フォームを使うことで他のフレームワークで作ったものと、統一性を図ることが出来る。
例えばアドインファイルにしておいて、立ち上がり時にEXCELのアプリケーションを非表示にしてフォームを表示すれば
見た目VBやC#で作ったのと体して変わらない様なものが作れる。
後はフォーム特有のイベントが有った様な無かった様な・・・
まぁ今までEXCELでフォーム使わないで困ったこと無かったけどね。
逆にファイルを閉じた場合、フォーム中心に考えていたら変数にファイルが閉じる前の値を
継続して使わせたい時、結局シートや外部ファイルに値を残したりそれなりの仕組みを作らなければならないことを考えると、
最初からシートでいいじゃんて事になったり、INIファイルもコントロール用のシートを作ることで
外部ファイルにしなくてもまかなえたりする。
まぁでもあくまで自分だったらということであまり拘らないでいいと思うよ。
0566デフォルトの名無しさん2011/06/22(水) 02:20:56.81
ああ、別にアドインファイルにしなくてもEXCELのアプリケーション非表示にすればいけるかな?
0567デフォルトの名無しさん2011/06/22(水) 17:54:06.24
セルに入力されている数値分だけ、その行すべてコピーして下に数値分挿入ってどんな構文書けばいいでしょうか。

コピー挿入が終われば、次の行の数値を読んで、また同じ処理を繰り返したいです
0568 【東電 84.2 %】 2011/06/22(水) 19:08:59.28
>567
丸投げなら ビジネスsoft板/Excel総合相談所97 へどうぞ
0569デフォルトの名無しさん2011/06/22(水) 21:02:39.15
Valueプロパティって、エクセルのシートへの文字入力、値の取得以外にも
役割があるんですか?

参考書勧めてたらユーザーフォームの項目でも見慣れる形で出てきたのですが・・・

もうひとつですが、変数の宣言に関しての質問です

「Dim 変数名 As データ型」と宣言方法はなると参考書に書いてますがAs データ型以降は省略しても
大丈夫なんでしょうか?(´・ω・`)初学者で困っています
0570デフォルトの名無しさん2011/06/22(水) 21:14:38.54
>>569
value省略してたら、数字が文字列として転記されたりする。

as移行を省略したら、宣言する意味がない。
0571デフォルトの名無しさん2011/06/22(水) 21:44:40.10
>>569
その辺、その参考書には書いてないのか。
なんちゅう参考書だ。

まずValueは値。シートに限らず、また、文字列に関わらず値を司るプロパティ。

変数の型は省略すると、Variantと言う型が割り当てられるけど、これがメモリを16バイト以上食う。
例えばInteger型などは2バイトしか使わないが、この型で済む様な値しか扱わない様な場合、
型を設定しなければしない分だけ無駄なメモリ領域を消費し圧迫して処理速度にも影響を与える事もある。

とりあえずコードを書く際、先頭行にOption Explicitと書いて、使う変数は例えVariantであってもそれを
明示的に型指定する様に記述する事をお勧めする。

特に型の指定は後々Object指向言語を使う事になった場合、VBAとは比較にならないくらい
色々な制限や使い方があるので、そちら方面に進みたいならせめて型の宣言は常に行う癖を付けておいた方がいいと思う。
0572デフォルトの名無しさん2011/06/22(水) 23:43:36.89
環境 OS WinXP Excel2003

Felicaカードリーダを用いて、VBAのユーザーフォームで、Felicaカードの読み込み機能を作成しています。
ユーザーフォームが表示されている場合のみ、カードの読み込みを受け付けたいのですが、
VBAってApplication.onTime以外に、イベントのような扱いはできないものでしょうか?
0573デフォルトの名無しさん2011/06/23(木) 00:25:28.22
>>572
APIでフォームのハンドル探せばいいんじゃないの?
0574デフォルトの名無しさん2011/06/23(木) 06:06:50.62
WinAPIやハンドルなんて解らないとか言い出しそうだが
Excelとは関係ない部分なので、なんにしろスレ違いだな。
0575デフォルトの名無しさん2011/06/23(木) 07:23:46.36
>>573
ご返答ありがとうございます。フォームのハンドル関連からググッてみます。

>>574
たしかにWinAPI等詳しいと呼べるちしきはないですね。
ただ、Excelの機能で待ち受け状態が擬似的にできればよいので、
そのような方法がないかさがしておりました。

どちらにしろ、お二方ご返答ありがとうございました。
0576デフォルトの名無しさん2011/06/23(木) 09:53:12.59
できるよ
0577デフォルトの名無しさん2011/06/23(木) 12:04:53.33
VBAで組み込み関数と同じ名前の変数を作ってしまったんだ。(先頭の文字が小文字になっている変数)

インテリセンスがうまくきかなくなってしまったんだけど…どうしたら元に戻せますか?
0578デフォルトの名無しさん2011/06/23(木) 16:27:12.09
>>577
dimを消す
0579デフォルトの名無しさん2011/06/23(木) 18:01:56.89
>>578
消してあります。
なのにちゃんと機能してくれません…

クリーンがあればよかったとつくづく思います
0580デフォルトの名無しさん2011/06/23(木) 18:41:41.79
>>579
再度宣言し直す
例えばmsgboxと、変数を作ってしまったら
Dim MsgBoxと、VBEに書いてから
このDim〜を消す
0581デフォルトの名無しさん2011/06/23(木) 18:58:24.32
エクスポートしてインポートするといいんだな
0582デフォルトの名無しさん2011/06/23(木) 19:06:12.15
印刷時の印字濃度を制御するコーディングは可能でしょうか?

めちゃくちゃ薄い印字がしたいのです。
0583 忍法帖【Lv=2,xxxP】 【東電 84.1 %】 2011/06/23(木) 19:49:39.54
>582
プリンタドライバでの設定じゃダメなの?
0584デフォルトの名無しさん2011/06/23(木) 19:58:52.19
できるよ
0585デフォルトの名無しさん2011/06/23(木) 20:05:49.55
それを実現するための、メソッドとプロパティを教えていただけませんか?
0586デフォルトの名無しさん2011/06/23(木) 22:18:53.61
>>580,581
できたっ…本当にありがとう…!
0587デフォルトの名無しさん2011/06/23(木) 23:03:07.11
印字濃度が変更できるプリンタってそんなにないでしょ
できてもせいぜい3段階ぐらいだよね
制御方法も機種ごとに全然違うし

それよりも文字や罫線を明るい灰色に変更してグレースケールかカラーで印刷した方がよくない?
0588デフォルトの名無しさん2011/06/24(金) 07:39:40.50
やっぱり無料なんですかね。どうしてやりたかったというと、社内のインク代節約を実現したかったからです。
0589デフォルトの名無しさん2011/06/24(金) 11:18:06.47
ドラッグ&ドロップを常に切り取りにする方法ってある?
vbaとは関係ないがw
0590デフォルトの名無しさん2011/06/24(金) 11:24:48.25
× ドラッグ&ドロップを常に切り取りにする方法
○ ドラッグ&ドロップを常に切り取り貼り付けにする方法
0591デフォルトの名無しさん2011/06/24(金) 11:26:38.49
>>589-590
Shiftを押しながらドラッグ&ドロップ
0592デフォルトの名無しさん2011/06/24(金) 11:29:25.34
Shiftを押すのは邪魔くさいので、
どこかのチェックボックスをon/offすることでできない?
0593デフォルトの名無しさん2011/06/24(金) 12:26:55.78
お前らそろそろEXCEL-DNAに移行しろよ。
幸せになれるぞ。
0594デフォルトの名無しさん2011/06/24(金) 12:47:48.76
なんたよDNAって
0595デフォルトの名無しさん2011/06/24(金) 12:53:45.82
>>592
Shiftキー連打しろ
0596デフォルトの名無しさん2011/06/24(金) 13:25:20.40
>>594
http://exceldna.codeplex.com/

VBAの代わりにC#やVB.NETが使えるようになる。
Visual studio(EXPRESSで十分)で開発できるだけでも効率が上がるし、
処理速度もC#>VBAだし、今のところ欠点が見あたらない。
Excel97でも動くそうだぞ。
0597デフォルトの名無しさん2011/06/24(金) 13:51:41.45
On Error Gotoについて質問です。(EXCEL 2003)

現在DBのような規則的に並んでいるデータからキー値を取得して、
そのデータをデザインしたフォーマットに基づきEXCELファイルに出力させようとしています。
  ※↑は説明用に作りました。(キー値は手入力の為、どうしても重複する事がしばしば)


上記のマクロ組んでいるのですが、キー値が被ってエラーが発生する事があります。
なので、キー値が被っていたら次のデータへいくように下記のようにエラー処理をいれてみました。
悩んでいるのは、エラー発生時に全て定義したGOTO文へ飛んでしまうのですが、回避策ありますでしょうか?

sub TEST()

On Error Goto NEXT

if CheckKeyData then 'キーチェックし重複であれば NEXTへ
 Goto NEXT
end if

sheets("aaa").select 'もし、ここでありもしないシートを選択したとしても、NEXTへいってしまいます。

NEXT:

end sub

よろしくおねがいします。
0598デフォルトの名無しさん2011/06/24(金) 13:53:32.53
>>597 です。

説明不足失礼しました。
キー値はEXCELに手入力で打ち、EXCELからマクロ実行するとDBのようなファイルへアクセスし、
データひっぱってくるよにしています。
0599デフォルトの名無しさん2011/06/24(金) 14:04:28.53
ラベルを2つに分ける
0600デフォルトの名無しさん2011/06/24(金) 14:09:02.59
>>596
なん……だと……
エクセルをdotnetで動かせるわけじゃないよな?
0601デフォルトの名無しさん2011/06/24(金) 14:09:07.52
>>599
ラベル効果を無効にしてしまうような機能があればと思いましたが、
やっぱりラベル複数用意しないと回避はできないのですね・・・
ありがとうございました。
0602デフォルトの名無しさん2011/06/24(金) 14:43:02.06
On Error GoTo 0を入れれば
0603デフォルトの名無しさん2011/06/24(金) 14:50:39.84
>>600
http://goo.gl/RtO4B

ここ日本語だから順番に読めば感じが掴めると思う。
スレチすまん。
0604デフォルトの名無しさん2011/06/24(金) 23:25:43.21
自分でチェックしてGotoするなら、On Errorいらないと思うんだが...
0605デフォルトの名無しさん2011/06/24(金) 23:40:03.96
VBAでシストレしてる人
データはどこからとってる?
0606デフォルトの名無しさん2011/06/25(土) 00:34:59.95
散布図に最初は目盛りの最大値を自動で合わせる状態にして計算をして
計算が終わったらxとyの目盛りの最大値を比べて高い方の値に両方を合わせたいのですがどうすればいいでしょうか
sheet1のグラフ2です
0607デフォルトの名無しさん2011/06/25(土) 01:36:28.25
事故解決しました
0608デフォルトの名無しさん2011/06/25(土) 11:00:02.63
VBAでindirectするにはどうしたらいいですか?
例としてセルA1に"Sheet2!B2"と書いてあって、A1の通りSheet2!B2に"×"と記入する
0609デフォルトの名無しさん2011/06/25(土) 11:02:58.48
前スレにありました
事故解決しました
0610デフォルトの名無しさん2011/06/25(土) 12:06:31.50
>>603
EXCELのVBE上で入力補完付きで編集出来る様になるなら期待するけど、
そうじゃなきゃVS上で作ってdllにして参照した方が早いからイラネ
0611デフォルトの名無しさん2011/06/25(土) 12:50:21.80
Xについての4次方程式を解きたいのですが
これはゴールシークを使ってどのようにすればいいのでしょうか?
よろしくお願いします。
0612デフォルトの名無しさん2011/06/25(土) 13:25:09.72
UserForm1を二つ表示することは可能でしょうか?
同じのを二つ作らないとだめなんですかね
0613デフォルトの名無しさん2011/06/25(土) 18:16:00.74
不可能なはず
でも、同じのを2つ作れば完璧に解決することなんだから、それでいいじゃん
どんなに複雑なフォームだろうと、全く同じのを作るなら、ほとんど手間かからないし
0614デフォルトの名無しさん2011/06/25(土) 18:29:54.16
コピペして終わりだろ・・・
0615デフォルトの名無しさん2011/06/25(土) 21:57:41.25
他のブックに現在開いているブックから
セルの中に変数名を含む式を記述する方法について質問です。
dim 数字 as integer
Workbook.Worksheets("Sheet1").Cells(1, 1).Formula = "=数字 * 100"
とやると、「=数字 * 100」とそのまま入ってしまい上手くいきません。
どのように記述すれば良いのでしょうか?
よろしくお願いします。
0616 忍法帖【Lv=2,xxxP】 【東電 75.4 %】 2011/06/25(土) 22:08:11.44
>615
).Formula = "=" & 数字 & "* 100"
0617デフォルトの名無しさん2011/06/25(土) 22:51:51.08
Month関数を使いたいのですが
month()と小文字になって、配列がありませんとエラーになります
どうしたら良いですか?
0618デフォルトの名無しさん2011/06/25(土) 22:56:24.22
定義されてないんだろ
0619デフォルトの名無しさん2011/06/25(土) 23:16:35.44
month という 変数 を宣言してない?
06206152011/06/25(土) 23:32:36.09
>>616
答えてくれてありがとうございます。
助かります。
0621デフォルトの名無しさん2011/06/25(土) 23:35:40.75
>>617
文を書いてみろ
0622デフォルトの名無しさん2011/06/26(日) 00:03:04.90
A1にaaa.xls
A2にbbb.xls
と合った場合に
もしExcelファイルと同じフォルダにaaa.xlsやbbb.xlsがあった場合
それぞれリンクをつけてそのボタンを押下すると自動的に起動させたいのですが
可能でしょうか?

当然なかった場合にはリンクは張らない状態です
0623デフォルトの名無しさん2011/06/26(日) 00:14:20.37
できる
0624 忍法帖【Lv=1,xxxP】 2011/06/26(日) 00:26:36.65
IF文について質問です
If c >= 1 Then 〜
「1」を別のワークシートのA3〜Z3までの値にする場合
どのように書いたらいいのでしょうか?
0625デフォルトの名無しさん2011/06/26(日) 00:42:44.00
なんか同じ奴がつまらん質問を繰り返しているようだが
気のせいか?
0626デフォルトの名無しさん2011/06/26(日) 00:53:01.60
ヒント:ゴッゴル先生
0627デフォルトの名無しさん2011/06/26(日) 05:53:52.09
>>614
ユーザーフォームの内容によってはエクスポートして、ユーザーフォーム名だけ変えてインポートした方が早い

>>624
論理演算かループで
0628デフォルトの名無しさん2011/06/27(月) 01:22:08.21
(ブック名)は既に開いています。 二重に開くとこれまでの変更内容が失われます。
といったエラーが出ることについて質問があります。
Dim thisBook As Workbook
Set thisBook = ThisWorkbook
Set Workbook = Workbooks.Open(thisBook.Path & "\test.xlsx")
ThisWorkbook.Activate
中略
Workbook.Worksheets("Sheet1").Cells(1, 1).Value = ID
というようにこれだと1回目の書き込みは上手く行きますが
2回目以降が上記のエラーが出て上手くいきません。
http://www.excel.studio-kazu.jp/kw/20071007202040.html
ここを参考に
If flg = False Then の下にブックが開いていない場合の処理として開くように
Set Workbook = Workbooks.Open(thisBook.Path & "\test.xlsx")
と書いてみたのですが駄目でした。
どこが悪いのか教えて頂けると非常に助かります。よろしくお願いします。
0629デフォルトの名無しさん2011/06/27(月) 05:57:42.37
1回処理が終わる毎にちゃんと閉じてるの?
閉じずに開くばかりじゃ、エラーも当然だろw

2回目にまた開くなら、1回目が終わったところできちんと閉じる
1回目が終わっても閉じないなら、2回目は新たに開くのではなく
既に開かれているものを利用する

そんな当たり前のことをちゃんとやれば問題ないと思うが
0630デフォルトの名無しさん2011/06/27(月) 11:24:28.95
質問させてください

エクセルのバージョン(2010とか2000とか)を調べる方法を教えてください お願いします
0631デフォルトの名無しさん2011/06/27(月) 11:43:07.35
Application.Version
06326312011/06/27(月) 11:46:34.09
Application.Versionでぐぐってこういうのがあった
2010は持ってないから知らん

sVer = Application.Version
Select Case sVer
Case "12.0"
MsgBox "Excel2007"
Case "11.0"
MsgBox "Excel2003"
Case "10.0"
MsgBox "Excel2002"
Case "9.0"
MsgBox "Excel2000"
Case "8.0a"
MsgBox "Excel97 SR-1"
Case "8.0"
MsgBox "Excel97"
Case "7.0"
MsgBox "Excel95"
Case Else
MsgBox "不明"
End Select

0633デフォルトの名無しさん2011/06/27(月) 12:20:10.64
質問する前にちょっとはググれよ。
2chに書くのもGoogleの検索窓にキーワード書くのも手間は変わらんだろ?
0634デフォルトの名無しさん2011/06/27(月) 12:22:19.72
ありがとうございます!
0635デフォルトの名無しさん2011/06/27(月) 19:46:29.94
非表示シートを再表示するのに Worksheet.Visible = True とすると
「'Visible' メソッドは失敗しました」と出るのですが、原因が判りません
表示したシートに対して Worksheet.Visible = False は動きます
環境はWin7、Excel2003です
よろしくお願いします
0636デフォルトの名無しさん2011/06/27(月) 19:56:23.91
対象が間違っている
0637デフォルトの名無しさん2011/06/27(月) 20:08:48.59
それだとFalseの方も動かないと思うんですよ
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("aaa")
ws.Visible = True
 :
ws.Visible = False
0638デフォルトの名無しさん2011/06/27(月) 20:36:20.98
>>637
Excel2000だと、自動計算か何かの設定によってVisibleが失敗するってバグがあった気がする
2003はどうかなあ

変数wsがどっかで変更されてない?
とりあえずテスト用のプロシージャを作って最小限のコードで試してみ

Sub 表示テスト()
  Dim ws As Worksheet
  Set ws = ThisWorkbook.Worksheets("aaa")
  ws.Visible = False
  ws.Visible = True
End Sub
0639デフォルトの名無しさん2011/06/27(月) 21:05:56.79
>>638
XP、Excel2000ではエラー出なかったです
今Excel触れないので後日テスト用コードを試してみようと思います
0640デフォルトの名無しさん2011/06/27(月) 22:09:04.34
Range("A1").Formula = "=SUM(A2:A3)"
と、上のような足し算等をCellsを使ってやりたいのですが
Cells(1, 1).Formula = "=SUM(Cells(1, 2):Cells(1, 3))"
と書いても駄目で、他にも試してみましたが上手くいきませんでした。
どのように書けばよろしいでしょうか?
よろしくお願いいたします。
0641デフォルトの名無しさん2011/06/27(月) 23:24:08.01
>>640
Cells(1, 1).Formula = "=SUM(" & Cells(1, 2).Address(0, 0) & ":" & Cells(1, 3).Address(0, 0) & ")"
0642デフォルトの名無しさん2011/06/27(月) 23:25:42.26
>>640
訂正。>>641だとSUM(B1:C1)になる

Cells(1, 1).Formula = "=SUM(" & Cells(2, 1).Address(0, 0) & ":" & Cells(3, 1).Address(0, 0) & ")"
06436402011/06/28(火) 00:20:40.00
>>642
ありがとうございます。
Address(0, 0)と書くとは全くしりませんでした。
勉強しておきます。
ありがとうございました。
0644デフォルトの名無しさん2011/07/02(土) 09:12:51.83
VBAで再帰使うとすぐスタックオーバーフローとか出るね
0645デフォルトの名無しさん2011/07/02(土) 09:33:55.55
まぁ「すぐに」って言うのもどれぐらいを指してすぐなのかと言うのはあるけど、俺も再帰処理はキライ。
階層を持つ様なものを生成させる場合でも、なるべく避けるな。
0646デフォルトの名無しさん2011/07/02(土) 12:16:24.74
Rangeのデフォルトプロパティについて質問です。

For Each r In Range("A1").Value
  Debug.Print r
Next

↑で1行目でエラーが発生するのは分かるのですが、

For Each r In Range("A1")
  Debug.Print r
Next

↑のようにValueプロパティを省略した場合に、
エラーが発生しない理由が分かりません。

Rangeでプロパティを省略した場合は、
デフォルトであるValueプロパティが選択されると思っていたのですが、
何か別のプロパティが選択されているのでしょうか?
0647デフォルトの名無しさん2011/07/02(土) 13:45:02.52
For Each r In Range("A1")
 の Range("A1")
 は Valueプロパティ(又は他のプロパティ) が省略されたものではなく
 Rangeオブジェクト(が返される)だから
0648デフォルトの名無しさん2011/07/02(土) 14:52:05.30
Rangeの既定のプロパティはValueではない

バージョンによってヘルプの記載もよくわからない状態になってるんだが
すくなくとも、2007のヘルプで Range.Cells プロパティ を見てみると
>Item プロパティは、Range オブジェクトに対する既定のプロパティであるため
と書いてある

オブジェクトブラウザで確認するとホントは_Defailtっていう隠しプロパティだったいする
で、こいつが場合によってItem(=Cells)のようにふるまったりValueのようにふるまったりする
なので、この場合は
For Each r In Range("A1").Cells と同じ意味
明示的にこう書く方が解りやすくて俺は好きだ

まあ、あんまりデフォルトプロパティを使うのはよくない
0649デフォルトの名無しさん2011/07/02(土) 15:11:21.83
C#とかだとデフォルトプロパティが禁止されたから、意識するべきではあるな
VBAもやがて.NETに移行するのかも知れんし
0650デフォルトの名無しさん2011/07/02(土) 16:09:28.63
いいねぇ.Net。
C#Aとかになって、今のモジュールやクラスモジュールごとにモジュールを分けるんじゃなくて、
名前空間ごとにファイルを分けたり、継承だけじゃなく、ポリモーフィズム効かせられたり、
ジェネリックやデリゲートやラムダ式とか使えれば最高なんだけどね。

もっとも、今までのVBAの資産があるから中々難しいだろうけどね。
0651デフォルトの名無しさん2011/07/02(土) 18:56:05.91
>>650
つ EXCEL-DNA
0652デフォルトの名無しさん2011/07/02(土) 21:13:58.22
>>651
だからファイルが分かれるなら余りうま味が無いって。
VSからdllファイル作った方が早い。入力補完も効くし。
0653デフォルトの名無しさん2011/07/03(日) 00:26:18.34
むしろデータとアルゴリズムの分離って意味ではファイルが分かれた方が良くね?
アドイン化した後のファイルの配布の管理が面倒だけど。
0654デフォルトの名無しさん2011/07/03(日) 07:20:43.64
>>653
>むしろデータとアルゴリズムの分離って意味ではファイルが分かれた方が良くね?

それはどんなシステムとして使うかによりけりだけど、
ファイルを分割して各機能を分けるくらい大掛かりなものなら
データはAccessやSqlServer、Olacleなどで持って、ロジック部は.NetFrameworkやJavaとかで作成して、
出力物としてExcelを使う様にした方がそれぞれの長所を活かせる。

そうなると、基本ロジック部は.NetFrameWorkやJavaとかで扱うことになるから、
益々Excel-DNAとやらの出番は無くなることになると思うよ。
0655デフォルトの名無しさん2011/07/04(月) 10:30:14.23
VB.netちょっとやってて
VBAに来てナンジャコリャーって思うのが
「コロンイコール(:=)」これ

イコールとどう違うの?
0656デフォルトの名無しさん2011/07/04(月) 10:56:04.89
プロパティ設定
dotnetでもあるだろ
0657デフォルトの名無しさん2011/07/04(月) 11:36:15.90
>>654
>益々Excel-DNAとやらの出番は無くなることになると思うよ。

試しもしないで必死に避難してるの?
まあ、それはさておき、

VSが使える > ファイルが分割される
.NETが使える > ファイルが分割される
って言う人もいるだろうよ。
俺はVBA資産が多いのでいきなりは移れないけど、面白い
アイデアだと思うよ。
0658デフォルトの名無しさん2011/07/04(月) 12:18:41.51
ファイル分割ってのがいまいちわからんな
ソリューションファイルとかbinフォルダが生成されるとかだと、エクセルやアクセスが単体で動作出来なくなるじゃないですか、やだー!
いずれdotnetに移行するとは思うけど、VSからリリースされ、かつオフィスソフト単体で製造出来るVBA.NETになると思いたい
相互開発可能な形で、モジュールインポート見たいにプロジェクトに組み込まれる方式ににていただきたい
0659デフォルトの名無しさん2011/07/04(月) 12:51:13.43
>>657
避難してどうする。

ファイルが分かれるってメリット大じゃん。
あの糞使いにくいVisual Basic Editorわなくて済むんだから。
一旦Visualstudio使い始めるとVisual Basic Editorは苦痛でしかないよ。
0660デフォルトの名無しさん2011/07/04(月) 13:07:11.96
あのIDE使いにくいところもあるんだが
わざわざ手打ちしてるのに勝手にインテリセンスに修正したり、インテリセンスにあるのに別候補に書き換えたり
機能を個別に設定出来ないし
まじでストレス溜まる
0661デフォルトの名無しさん2011/07/04(月) 19:01:41.43
Excel2007

フォーム上に貼りつけたボタンに付いては例えば
xxbtn.Enabled=True
xxbtn.Enabled=False
みたい有効・無効を設定できるけど
シート上に貼りつけたボタンに付いては
有効・無効を設定できますか?それ以前にそのボタン名をどうやって
取得できるのかってのもあるんですけど。。。
0662デフォルトの名無しさん2011/07/04(月) 20:44:12.54
>>657
だからそうなるんなら、最初からVS使えって話。
VS上で.NetFrameWorkの言語から
EXCELを操作すればいい。
0663デフォルトの名無しさん2011/07/05(火) 10:30:21.42
>>662
もう一回だけ言うけど、試してから文句言ったら?

VisualstudioからEXCEL使おうとすると、普通はあのめんどくさいCOM経由で
アクセスする必要があるだろ?EXCEL-DNAなら.NETの機能を使用しつつ、
COM経由のアクセスの面倒さを回避できるんだよ。
豊富な.NETの機能もつまみ食いできるしな。

試してから気にくわなければ、使わなければ良いだけだと思うけど。
0664デフォルトの名無しさん2011/07/05(火) 23:25:31.30
C とか C++ ならいざ知らず、VB.NET とか C# ならたいして面倒じゃないだろ。
どうみても試す価値なしだと思うので、俺には不要。
0665デフォルトの名無しさん2011/07/06(水) 00:16:45.31
>>664
C#はデフォルトプロパティの省略ができないだけでなく、パラメタの規定値の設定ができない
ExcelをCOMオブジェクト経由で呼び出すのは非常に面倒、というか冗長
Type.Missingの嵐になる

分からないなら、お前さんのExcelVBA上で、パラメタの省略を一切せずに全てカンマを入れてみろ
0666デフォルトの名無しさん2011/07/06(水) 00:27:50.43
俺もどこの馬の骨が作ったか分からない
大して人柱にも精査されていない
ひょっとしたらウイルスが仕込まれているかもしれない様なのを手放しで入れるのは嫌だな。
0667デフォルトの名無しさん2011/07/06(水) 07:42:25.55
>>665
4.0以降ならそんなこともないんじゃなかったっけ?
06686652011/07/06(水) 07:56:59.76
>>667
RCWのこと?4.x系で書いたことないからよく知らんのだけど
確かにオプションで引数、名前付き引数が追加されたようだね
COM資産は未だに影響が大きいようだ

でも大体Excelのバージョンは決めうちできないから遅延バインディングで
書くことになるだろうし、リフレクションを通さなくちゃいけなかったりと割と面倒
VBだともうちょい楽に書けるようだけど
0669デフォルトの名無しさん2011/07/06(水) 11:46:25.28
>>665
この御仁たぶんC#もまともに使ったこと無いでしょ。
相手するだけ無駄だと思うよ。
0670デフォルトの名無しさん2011/07/06(水) 13:46:21.72
つか、Excel-DNAが何者か良くわかってないで書いてる奴大すぎ。
まず、ここ読んでね。
http://supermab.com/wp/%E3%81%AA%E3%81%9C-excel-dna-%E3%81%AA%E3%81%AE%E3%81%8B%EF%BC%9F/
06716612011/07/06(水) 14:59:21.71
回答してくれそうな雰囲気なしなんでこの質問は閉じます
0672デフォルトの名無しさん2011/07/06(水) 15:45:34.74
ボタンを押したらオートシェイプを出すっていうプログラムが書けたのですが、
押すたびに座標をずらして図を表示させたいのですがボタンの判定をifの条件式
に入れる方法ってありますか?
0673デフォルトの名無しさん2011/07/06(水) 16:22:57.35
>>671
質問ならならあげとけよ
Sheet1.Shapes("Button 1").ControlFormat.Enabled = False
Sheet1.CommandButton1.Enabled = False
とか

>>672
ボタンの判定をifの条件式に入れるってどういう意味だ?
普通はボタンを押してからコードで判定すると思うんだが
0674デフォルトの名無しさん2011/07/06(水) 16:35:15.41
>>673
ボタンを押すたびに座標に数値をプラスしていく感じかとおもって
if ボタンが押される then 座標に値を足す
みたいにできないかと思いまして
0675デフォルトの名無しさん2011/07/06(水) 21:03:31.39
ひょっとしてボタンってキーのこと?
だったらAPI使えば出来るよ。スレチだけど。
0676デフォルトの名無しさん2011/07/06(水) 23:14:11.08
>>674
ボタンを押したら、シェイプを(ずらして)表示させるんだろ?
つまり、ボタンを押した処理の中で判断すればいいのでは

イベントとかよくわかってないレベルの人か?
0677デフォルトの名無しさん2011/07/06(水) 23:38:20.63
VBAでウィルスって作れるの?
0678デフォルトの名無しさん2011/07/06(水) 23:46:03.09
ファイルの特定の二列の入力値の組み合わせは4種類しかありえなくて、その4種類の組み合わせに応じて
その行の他の列のセル内容を転記するかどうかを決めさせたくて、FindやIfを使えば簡単に書けそうだと思って
朝からこの時間まで格闘してましたが、できませんでした・・・

 A B C  D
1○○
2○×
3×○
4××
5○○
6×○
7××
8○×

単純化するとこうなっていて(行の多さはファイルによって変動し、常に8行とは限らない。ただしA〜の横方向の入力内容は常に固定)。
そして、Cells(i, A) と Cells(i, B)の組み合わせが

AB=○○ → 何もしない
AB=○× → 何もしない
AB=×○ → その列の(C,D...)はコピー対象
AB=×× → 何もしない

そしてまずCells(i, A) と Cells(i, B)の組み合わせが○×の行が一つもないファイルは閉じて
一つでもあるファイルは、個々の行をコピーするようにしたいのですが・・・・簡単に見えて全くできませんでした

「○×」の行が一つもないかどうかをフラグで返す方法だけでも宜しいので、ヒントなり戴けないでしょうか?
0679デフォルトの名無しさん2011/07/07(木) 00:07:49.13
>>678

いまひとつ何がしたいのか分からないんだけど
普通にこんな感じで駄目ですか?

ファイルを開いて

フラグをOFFに

(行について繰り返し開始)
 もしこの行が空白なら行についての繰り返しを抜ける

 もしこの行のA列が○ かつ B列が×ならフラグをONにする

 行をひとつ進める 
(ここまで行についての繰り返し)

もしフラグがONならコピー処理をする

ファイルを閉じる



0680デフォルトの名無しさん2011/07/07(木) 00:30:35.64
>>678
'指定範囲で○×の行を探す あればTrue なければFalse
Function checkOX(CheckRange As Range) As Boolean
    Dim i As Long
    checkOX = False
    If CheckRange.Columns.Count <> 2 Then
        MsgBox "2列を指定してください"
        Exit Function
    End If
    For i = 1 To CheckRange.Rows.Count
        If CheckRange.Cells(i, 1).Value = "○" And CheckRange.Cells(i, 2).Value = "×" Then
            checkOX = True
            Exit Function
        End If
    Next
End Function
0681デフォルトの名無しさん2011/07/07(木) 00:40:23.24
>>678
ヒント:imp演算子
0682デフォルトの名無しさん2011/07/07(木) 01:10:44.50
>>681
長いことBASIC使ってるけど、そんな演算子初めて知ったわ
一つ勉強になった
ただ、.NETで廃止されてるらしいし、この先使うことない知識だろうけど
0683デフォルトの名無しさん2011/07/07(木) 01:25:25.68
Excel2007のマクロが遅いことで質問させてください
あるフォルダにあるすべてのブックの各シートを一枚のシートに貼り付けなおすマクロを作っています。
ただExcel2003では問題無く動くのですが、
Excel2007で互換モードまたはxlsmで保存しなおして動かすと
最初は早く処理されているのですがだんだん処理が遅くなっていきます。
(Application.ScreenUpdatingはTrueのままですがFalseでも変わりありません)

また、処理が遅いときにExcelの画面外をクリックすると(Excelを非アクティブにすると)
途端に処理が高速に戻ります。

同じ経験をした方等、対処方法わかるかたはいらっしゃいますでしょうか?
0684デフォルトの名無しさん2011/07/07(木) 03:48:59.52
セルをバリアント型に入れて計算していて
途中でApplication.WorksheetFunction.Sumなど使いたいとき
バリアントの特定領域をRange型に変換するスマートな方法教えてください。
0685デフォルトの名無しさん2011/07/07(木) 05:22:58.04
>>684
ホントにセルがバリアント型変数に入ってるなら、その変数はすでにRange型だが?
Rangeに対してオフセットとりたいならRange.OffsetプロパティとかRange.Rangeプロパティ使え

Set c1 = Range("B2:C11")
Set c2 = c1.Range("B1:B10")
これでc2はC2:C10のRange型だぞ

だがまあ多分そういうことじゃないんだろうけど

バリアントの変数に入ってるのが値の配列なら
実際のセル(Range)に代入するしかないんじゃね

VBAで配列の特定範囲を切り出すスマートな方法はしらね
先頭からならReDim Preserveってのもなくはないが、もともと配列は
途中でサイズ変更するような用途向けではない
まあ必要なら関数1個つくっとけば良いだけだし
0686デフォルトの名無しさん2011/07/07(木) 05:56:44.44
>>685
Set c1 = Range("B2:C11")
Set c2 = c1.Range("C2:C10")
↑これやってみましたけど出来ませんでした。

Dim sh As Worksheet
Set sh = ThisWorkbook.Worksheets("Sheet1")
Dim cB As Variant
cB = sh.Range(sh.Cells(1, 1), sh.Cells(10000, 20))

Dim rng As Range
Set rng = cB.Range(cB.Cells(1, 10), cB.Cells(10000, 10)) ←イメージとしては、こんな風にRange型に入れたいです
0687デフォルトの名無しさん2011/07/07(木) 06:18:14.88
>>685
すいません出来ましたSetが付いてないだけでした
ありがとうございました!
0688デフォルトの名無しさん2011/07/07(木) 07:07:50.04
>>684
VBAを使わない。
全部Excel側でやる。
06896782011/07/07(木) 07:22:58.09
ありがとうございました!
助かりました
0690デフォルトの名無しさん2011/07/07(木) 23:00:11.25
>>665
> C#はデフォルトプロパティの省略ができないだけでなく、
> パラメタの規定値の設定ができない

C# 4.0 も知らない情弱か...、かわいそうになってきたよ。

>>668
よく知らないなら、ROM って1人で Excel-DNA とやらを使ってろよ。
また恥かくだけだぞ。

>>669
流石にこれは恥ずかしすぎ。
誰からも相手されてないんだろうな (w
0691デフォルトの名無しさん2011/07/08(金) 00:08:11.90
またキモいExcel-DNA儲が湧いてきたな
0692デフォルトの名無しさん2011/07/08(金) 00:18:16.68
どこをどう読んだら儲に見えるんだ?
0693デフォルトの名無しさん2011/07/08(金) 10:24:44.57
A1からD10まで0を入れたいんだけど
C列はそのまま放置したい
っていう時に
For s = 1 To 10
Sheet1.Range("A" & s) = 0 'A1からA10までを初期化
Sheet1.Range("B" & s) = 0 'B1からB10までを初期化
Sheet1.Range("D" & s) = 0 'D1からC10までを初期化
Next s
こうやってるんだけど、他に方法ある?
0694デフォルトの名無しさん2011/07/08(金) 10:53:33.56
A1:B10 と D1:D10 じゃだめなのかい
0695デフォルトの名無しさん2011/07/08(金) 10:55:26.22
cellsでfor2つにネストしてC以外の時に処理させるとか
0696デフォルトの名無しさん2011/07/08(金) 10:56:50.97
そんな感じで
ループで1行ずつ入れずに
(A1:B10) = 0
みたいなことをやりたい
0697デフォルトの名無しさん2011/07/08(金) 11:17:43.63
セル選択
selection.formulaR1C1=゙0゙
0698デフォルトの名無しさん2011/07/08(金) 11:49:43.55
c列をどっかにコピー
a:d列に0入れる
c列を戻す

とか
0699デフォルトの名無しさん2011/07/08(金) 11:49:55.09
Sheet1.Range("A1:B10").Select
Selection.FormulaR1C1 = 0
Sheet1.Range("D1:D10").Select
Selection.FormulaR1C1 = 0
で、できました
ありがとうございます。

どうでもいいけど
「で、できました」って
「こうするとできました」じゃなくて、
驚愕みたいな「う、うわっ」みたいに読めるよね
0700デフォルトの名無しさん2011/07/08(金) 12:38:47.57
>>699
693よりコード悪化してるぞ

まだ
Range("A1:B10").Value = 0
Range("D1:D10").Value = 0
のほうがマシ
0701デフォルトの名無しさん2011/07/08(金) 12:54:36.03
しかし汎用性のないコードだな
0702デフォルトの名無しさん2011/07/08(金) 14:45:52.41
>>701
仕様に汎用性がないんだよ
>>693読んで自分でコード書いてみろ
0703デフォルトの名無しさん2011/07/08(金) 15:29:19.08
>>692
そういうことにしないと否定できないんだろ。察してやれ。
0704デフォルトの名無しさん2011/07/08(金) 16:27:03.67
>>700
本当だ、こっちの方が早い
実際のプログラムは4列x60行で
最初のループだと置換が終わる処理まで約6秒かかっていたのが
>>699で約2秒
そのコードにしたら約1秒で終わった。
0705デフォルトの名無しさん2011/07/08(金) 16:49:15.41
そんなに違いあるのか
0706デフォルトの名無しさん2011/07/08(金) 16:52:40.89
PCの性能もあるだろうけど
A:1に0 A:2に0 A:3に・・・って60までループするより
A:1からA:60まで全部0!!(どかーん)
のほうが圧倒的に速いのは確定的に明らか
0707デフォルトの名無しさん2011/07/08(金) 19:52:44.00
VBAでももちろんだけど、
.NETのようなアウトプロセスでのアクセスだと顕著に差が出るよね
0708デフォルトの名無しさん2011/07/09(土) 12:34:25.78
オートシェイプに文字を書くのが調べてもわかりません
0709デフォルトの名無しさん2011/07/09(土) 14:16:54.34
>>708
よく見かけるのはこんな感じ

Dim Shape1 As Object
Set Shape1 = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 50, 50, 100, 100)
Shape1.Select (True)
Selection.Characters.Text = "hello"
0710デフォルトの名無しさん2011/07/09(土) 17:20:44.99
入力されている文字の左から1文字が1か2かで色をつけて他は空白にしたいのですがどうしたらいいですか

Private Sub Worksheet_Change(ByVal Target As Range)

With Target.Interior
Select Case Target.Left(Target.Text, 1) 'ここがわからない
Case "1"
.ColorIndex = 3
Case "2"
.ColorIndex = 5
Case Else
.ColorIndex = xlNone
End Select
End With

End Sub

あとできればRange("B2:Y35")の間だけこの色の変更が効くようにしたいのですがそこも教えて欲しいです
0711デフォルトの名無しさん2011/07/09(土) 17:21:38.14
すみませんメモ帳でやったらうまくインデントできませんでした
Private Sub Worksheet_Change(ByVal Target As Range)

With Target.Interior
Select Case Target.Left(Target.Text, 1) 'ここがわからない
Case "1"
.ColorIndex = 3
Case "2"
.ColorIndex = 5
Case Else
.ColorIndex = xlNone
End Select
End With

End Sub
0712デフォルトの名無しさん2011/07/09(土) 18:22:08.14
>>710

Private Sub Worksheet_Change(ByVal Target As Range)

If Application.Intersect(Target, Range("B2:Y35")) Is Nothing Then Exit Sub

With Target.Interior
Select Case Left(Target.Value, 1)
Case "1"
.ColorIndex = 3
Case "2"
.ColorIndex = 5
Case Else
.ColorIndex = xlNone
End Select
End With

End Sub
0713デフォルトの名無しさん2011/07/09(土) 20:33:06.03
>>712
できましたありがとうございます
0714デフォルトの名無しさん2011/07/09(土) 21:11:21.20
x = cells(a,b).c
xにaを返すためにはcを何にしたらいいんですか
0715デフォルトの名無しさん2011/07/09(土) 21:19:51.45
事故解決しました
0716デフォルトの名無しさん2011/07/10(日) 09:00:57.77
>>702
701じゃないけど、汎用性持たせるとこんな感じか?

Sub Test()
  Call NumericalInitialize([A1:B10,D1:D10])
End Sub

Sub NumericalInitialize(IniRange As Range)
  IniRange.Value = 0
End Sub

あるいは

Sub Test()
  Call InputValue([A1:B10,D1:D10], 0)
End Sub

Sub InputValue(InputRange As Range, Optional Value As Variant = Empty)
  InputRange.Value = Value
End Sub

とか。
でも、

[A1:B10,D1:D10].Value = 0

で良い気がする。
Range("A1:B10").Value = 0
Range("D1:D10").Value = 0
みたいに2行で書かざるを得ないものを、ParamArray使った自作関数で、
1行書き出来るようにするとかならまだしも、元から1行書き出来る上に、
関数化しない方が処理の明示性が高いくらいなので、関数化の旨味も少ない。
0717デフォルトの名無しさん2011/07/10(日) 22:38:57.11
一般の仕事で使えるマクロってどんなものがあると思う?
データ収集と解析以外あんまり使い道内容に思うんだが
0718デフォルトの名無しさん2011/07/10(日) 23:04:45.74
学校で、残響時間計算プログラムの課題が出て、途中までやりましたが、
分からずに困っています。
壁の吸音力の計算の下からが、全然分かりません。
どなたか、教えてください。

Excel file
ttp://www1.axfc.net/uploader/Sc/so/253823
マクロ
ttp://www1.axfc.net/uploader/Sc/so/253831

キーワードは「kadai」です。
よろしくおねがいします。
0719デフォルトの名無しさん2011/07/10(日) 23:45:16.05
>>717
帳票作成は?
昔さんざんやらされたけど w
0720デフォルトの名無しさん2011/07/10(日) 23:48:51.00
>>717
汎用的なものは作れんでしょうに
0721デフォルトの名無しさん2011/07/11(月) 00:56:39.90
>>718
スレ違い

学校の課題であるというのもスレ違い要素の一つだが、何よりExcelVBAとは関係ない質問だ
単に言語選択としてたまたまVBA使ってるだけで、C#でもVB6でも出来るような類の処理は
全てスレ違いなのでそこんところよろしく

ここはVBAでExcelのブックやシート、標準オブジェクト類を操作する話以外はスレ違いだから(>>2参照)
0722デフォルトの名無しさん2011/07/11(月) 01:02:12.23
>>721
御指摘ありがとうございます。

すみませんでした。
0723デフォルトの名無しさん2011/07/11(月) 01:31:42.69
>>718
やってみた

http://www1.axfc.net/uploader/File/so/65864

pass:kadai

式はググって使った 0.162*容積/-総面積*loge(1-平均吸音率)
で試してみたら満席のほうが長くなったぜ><
たぶん違うから自分で直してね!

wav生成のほうは離散フーリエがわからんからやってないぜ
0724デフォルトの名無しさん2011/07/11(月) 07:40:26.84
XP Excel2007です。
WEBクエリでページをシートに読み込んでるんですが、続けてるとアクセス出来なくなります。
WEBクエリのアクセスをブラウザからに見せる事は出来ますか?ユーザーエージェントを書き変えて送信とか。

別に攻撃しようとかじゃ無いんです。1秒に1回くらいアクセス出来ればいいです。
07257242011/07/11(月) 07:44:21.18
HttpSendRuqestやHttpAddRequestHeadersで検索したけど、
WEBクエリにどう応用していいか分かりませんでした。
VBA始めてそんなに長くないので、あんまり詳しくないです。
0726デフォルトの名無しさん2011/07/11(月) 09:57:44.86
>>709
ありがとうございます!!
0727デフォルトの名無しさん2011/07/12(火) 17:04:27.70
>>724
1秒に1回で逮捕された奴いるの知らないの?まじで気をつけた方が良いよ。
相手サーバがバグとも言える「仕様」でエラー頻発で逮捕。
岡崎図書館事件
http://librahack.jp/
0728デフォルトの名無しさん2011/07/12(火) 19:04:09.39
>>727
館長の基地外発言が話をヤヤこしくしたあれか
0729デフォルトの名無しさん2011/07/12(火) 19:57:31.14
パスワードかなんかが暗号化せずに鯖においてあったなんて話もあるんだっけ、あそこ
0730デフォルトの名無しさん2011/07/12(火) 21:45:56.66
逮捕されたけど結果は無罪だったじゃん
前例があるからこそ、今後はあんなバカな逮捕劇は起こらんのじゃないか?
0731デフォルトの名無しさん2011/07/13(水) 01:09:34.47
>>730
楽観的だなぁ・・・日本という国は技術がある者ほど割を食うIT後進国なのに・・・
Winny作ったやつは逮捕されても当然としてもその罪状が幇助罪だったから、開発者はみんな明日は事故的に火の粉をかぶると怯えたもんだ
0732デフォルトの名無しさん2011/07/13(水) 01:52:55.34
あれは怯えている設定にして無罪を勝ち取ろうとした戦術だろ。
実際には、ふ〜んて感じだった。
blogでDQN行為を自慢して炎上するようなもんだ。
0733デフォルトの名無しさん2011/07/13(水) 02:47:15.39
>>732
職業プログラマやってる友人やその仲間の話なんだけど
0734デフォルトの名無しさん2011/07/13(水) 07:22:33.01
案外、皆Winny系統のアプリ使いまくっていて、
巻き添え逮捕に怯えていたとかそんなところだったりしてw
07357242011/07/13(水) 08:50:40.24
>>727
そんな事件あったって知りませんでした。やっぱ相手サーバが拒否してる事はやっちゃダメか・・・
春ごろまではOKだったのに、リニューアルされたら急にアクセス規制がきつくなりました。
ソニーエンタメの影響かなあ

とりあえず串とwait関数で気長にやります。
0736デフォルトの名無しさん2011/07/13(水) 22:23:06.60
 きちんとしたデータを作ればVBAで工場の予定表も作れるし、
注文書も納品書もできるし、棚卸しだって効率的にできる。
極論すれば工場の経営や管理ができるんだから汎用的
だと思うよ。
0737デフォルトの名無しさん2011/07/14(木) 01:07:25.51
>>734
だーかーらー
プログラマとして物作りを阻害する警察の動きに不安を感じたんだってば
>>727のリンク先読んでから出直せよ

そんなことじゃ見せかけの民主主義かつ、中国共産党による言論統制、政府を守るためなら国民は死んでもいいって社会が日本でも永遠に続く
原子力発電のためなら国民やその子供が死んでもお構いなし、旧ソ連以下の日本のまんまだ
0738デフォルトの名無しさん2011/07/14(木) 07:22:12.93
何か剥がれてきたw
0739デフォルトの名無しさん2011/07/14(木) 08:17:14.43
初心者なので上手く伝わるかどうかわからないのですが

二個の図を同時に生成する時に、その二つをグループ化させた状態で生成する事ってできるでしょうか?
0740デフォルトの名無しさん2011/07/14(木) 18:34:58.06
はい、出来ます
0741デフォルトの名無しさん2011/07/14(木) 19:07:26.21
グループ化させた状態で作成?
2つ作成してからグループ化?
0742デフォルトの名無しさん2011/07/15(金) 09:57:06.25
開始
図1個目作成
図2個目作成
図1と図2をグループ化
終わり

これで同時生成かつグループ化した状態で出現したように見える
0743デフォルトの名無しさん2011/07/15(金) 11:56:58.05
指定したテキストファイルの行数を返してくれる1行のステキ関数ってない?
0744デフォルトの名無しさん2011/07/15(金) 12:10:18.83
自作
0745デフォルトの名無しさん2011/07/15(金) 23:10:53.46
エクセルで十字カーソルが表示できない?
折れ線グラフを見るときに便利なんだが。
0746デフォルトの名無しさん2011/07/16(土) 00:09:54.01
最近の質問者は丸投げが多いな。
自分でここまで調べたけけど、ここからが分からない
と言った感じが全く見受けられない。
0747デフォルトの名無しさん2011/07/16(土) 06:36:34.90
教えたがりが多いので問題ナッシン
0748デフォルトの名無しさん2011/07/16(土) 07:52:38.71
Excel2007
ブックを閉じられないようにするにはWorkbook_BeforeCloseでCancel=Trueですよな?
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim res As Variant

MsgBox "閉じる?", vbYesNo
If res = vbNo Then
Cancel = True
End If

End Sub
として、閉じるときに「閉じる?」のメッセージボックスは出てくるんだけど"いいえ"を選択しても閉じられてしまうんですけど。
0749デフォルトの名無しさん2011/07/16(土) 08:46:05.63
>>743
> 指定したテキストファイルの行数を返してくれる1行のステキ関数ってない?

split まあ帰ってくるのは数字ではないが・・・
0750デフォルトの名無しさん2011/07/16(土) 09:15:48.78
>>748
res に何も入ってないんでは?

以下サンプル

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If vbNo = MsgBox("閉じる?", vbYesNo) Then
Cancel = True
End If
End Sub
0751デフォルトの名無しさん2011/07/16(土) 09:39:25.07
>>750
あっ〜そうだ!w
すんませんでしたぁm(_ _)m
0752デフォルトの名無しさん2011/07/16(土) 10:20:47.55
>>743
ステキ関数はないけど1行で書くのは可能
Debug.Print CreateObject("Scripting.FileSystemObject").OpenTextFile("c:\test.txt", 8).Line - 1
ただしファイルの末尾が改行コードじゃなかった場合は1行少ない数値が取得されるんで、
そのあたりをちゃんと処理するには面倒なコードが必要
0753デフォルトの名無しさん2011/07/16(土) 20:07:47.72
何を調べればよいか解らないんだよたぶん
0754初心者2011/07/17(日) 08:09:27.83
初心者質問です。
sheet1 に A1から 
A B C
1 1 C b
2 3 A a
3 1 B a
4行目以降も各列にランダムに数字、文字がつづきます。

以前VBAプログラムをおしえていただいたのですが、途中、
a=range("A1").CurrentRegion.resize(,3).select     とありました。

これの resize(,3) の意味が解りません。
上のプログラムの意味を教えてください。お願いします。


0755 忍法帖【Lv=2,xxxP】 【東電 61.3 %】 2011/07/17(日) 09:02:32.10
>754
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_cell.html

resize(,3) は resize(1,3) と同じ意味のはずだから、>754の結果は
A1:C1の範囲(1行×3列)が選択されるはず
0756初心者2011/07/17(日) 09:34:21.06
>>755
resize(1,3)とおなじ意味だったのですか。ありがとうございます。

もう1つ聞きたいことがあるのですがすみません、よろしくおねがいします。
さっきの
a=range("A1").CurrentRegion.resize(,3).select
の下に、
for z= 1 to ubound(a,1)-1
とあるのですが ubound(a,1)-1 の意味がわかりません。
下記サイトでuboundを調べたのですが、、、よくわかりません。
http://msdn.microsoft.com/ja-jp/library/cc437658(v=vs.71).aspx

すみませんが少し教えてください。お願いします。
07577552011/07/17(日) 10:03:01.80
>754,756
試してみたら違ってました。ゴメンナサイ
当該範囲の行×3列 ということでした。(1行ではありません!)

range("A1").CurrentRegion. っていうのは>755で示したページの説明にもあるように
A1セルで [Ctrl]を押しながら[*}(ノートPCなら[Shift]を押しながら[* : け])を押した範囲
なので、このときに5行×5列が選択されたとしたら、5行×3列に選択し直される、ということです。

ちゃんと試してから書き込まないとダメですね、反省
0758デフォルトの名無しさん2011/07/17(日) 10:29:49.96
>756
a=range("A1").CurrentRegion.resize(,3).select って、ほんとですか?
a=range("A1").CurrentRegion.resize(,3) までならわかるけど(選択したセル範囲を配列に入れる)

ためしに
a = Range("A1").CurrentRegion.Resize(, 3).Select
MsgBox (UBound(a, 1))
だとエラー(実行時エラー13:型が一致しません)になりました。

a = Range("A1").CurrentRegion.Resize(, 3)
MsgBox (UBound(a, 1))
ならば選択セル範囲の行数が表示されました。
差し支えなければ当該マクロの関係する部分を示してくれませんか?
0759デフォルトの名無しさん2011/07/17(日) 10:37:52.96
はじめまして

ある莫大なテキスト文があります。これをコピーしExcelのシートsheet1にはりつけました。
いくつかの行にある文字 例えば 「金額は、~円」という文字か含まれていたとします。
質問ですが、~に書かれている数字をすべて拾い上げSHEET2にはりつけていく方法
おしえていただきたいのですが。長文てすみません。

宜しくお願いします。
0760 忍法帖【Lv=2,xxxP】 【東電 75.5 %】 2011/07/17(日) 10:42:46.76
>759
val関数で可能です。
http://officetanaka.net/excel/vba/function/Val.htm
0761デフォルトの名無しさん2011/07/17(日) 10:54:21.90
760
ありがとうございます。
サンプルの678は、表示できないですか?
07627602011/07/17(日) 11:01:38.11
>761
Sub Sample()
 Dim str As String
 str = " 123.45+678"
 MsgBox Val(str) '123.45を表示します ←
 str = "1,000"
 MsgBox Val(str) '1を表示します
End Sub
のことですね。 +記号 で一連の数字が途切れているためです。
小数点や3桁毎の区切りはつながった数字とみなします。
07637602011/07/17(日) 11:04:29.42
762の自己レス

アレ?
 str = "1,000"
 MsgBox Val(str) '1を表示します
3桁毎のカンマはダメなのか。
0764初心者2011/07/17(日) 11:36:32.72
>>758
すみません、a=range("A1").CurrentRegion.resize(,3).select  ではなく
a=range("A1").CurrentRegion.resize(,3).value でした。 ほんとうにすみません。
msgboxをつかってこんな確認もできるのですね。勉強になりました。

0765デフォルトの名無しさん2011/07/17(日) 11:55:49.30
おしえていただきたいです
findで検索し、findnextで次を検索します。

最後まで行ってから最初にもどらない方法おしえてもらいませんか
0766デフォルトの名無しさん2011/07/17(日) 12:03:44.55
>>759
"金額は、"でSplit、For 〜 Uboundで回してVal
Forは1からにすること
0767デフォルトの名無しさん2011/07/17(日) 12:04:20.66
>>765
教科書通りに書けば戻りません
むしろ最初に戻す方が手間がかかる
0768デフォルトの名無しさん2011/07/17(日) 12:04:26.27
>765 ここがわかりやすいと思う
http://officetanaka.net/excel/vba/tips/tips123b.htm
0769デフォルトの名無しさん2011/07/17(日) 15:22:55.77
下手くそなとこを教えない方がいい。
0770デフォルトの名無しさん2011/07/18(月) 08:19:31.06
100列300,000行のデータがあります
これの、行列入れ替えたテキストファイル作りたいのですが、ExcelVBAではやはり不可能でしょうか?
0771デフォルトの名無しさん2011/07/18(月) 08:26:58.63
おしえて下さい
あるセルに長い文字列があります。
数字と文字が含まれています。数字のみを取得する方法はないですか。
valだと最初の数字のみの取得になります。
数字すべてを取得したい。
0772デフォルトの名無しさん2011/07/18(月) 08:48:46.31
>>770
一列取り込んで一行出力を繰り返すだけ。
>>771
RegExp使うのが一番手っ取り早い。でなければ、一文字ずつ走査していくしかないな。
数字以外の文字を空白に変換→Splitで分割→数字の入っている要素のみ取り出す、とか
0773デフォルトの名無しさん2011/07/18(月) 09:39:32.71
772
ありがとうございます
でも文字列のみどうやって空白にできるのですか。
0774デフォルトの名無しさん2011/07/18(月) 10:02:59.80
Mid$でちまちま置換していく。
For off = 1 To Len(s)
 If Not Mid$(s, off, 1) Like "#" Then Mid$(s, off, 1) = " "
Next
大体こんな感じ?
0775デフォルトの名無しさん2011/07/18(月) 12:30:26.91
>>53
$がつくのとつかないのでは意味はどう変わるのでしょうか?
0776デフォルトの名無しさん2011/07/18(月) 12:49:05.21
Mid/Mid$関数の話なら、$が付く方の返り値はString、付かない方はVariant。
受け側がString以外の時はVBAが型変換してくれるのだから、
$が付かない方を選んで不要なコストを追加する理由は無い、
って話が前に出ていた気がする。
ステートメントの方は忘れた。わざわざVariantで受け付けるとかあるのかなあ。
0777デフォルトの名無しさん2011/07/18(月) 14:23:51.57
Like "#" の意味 御教示を。
0778デフォルトの名無しさん2011/07/18(月) 14:39:31.93
>777
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_find.html
任意の1文字の数字(0-9)を示します
07797782011/07/18(月) 14:42:17.11
なので、小数の場合は都合が悪いことになるはず。
123.45 が 123 と 45 という別々の数字と見なされる。
0780デフォルトの名無しさん2011/07/18(月) 14:53:44.81
そこまでいくと、>>771の意図している数字の定義を確認する必要があるな。
指数表記は流石に無いとしても、コンマ表記や符号等も考えられるし。
0781デフォルトの名無しさん2011/07/18(月) 15:01:07.05
>771は ひょっとして>759ですか?
もしそうだとしたら、前提条件をはっきり示してもらわないと。

「実は小数点やマイナス値もあるから〜」ってこと(条件後出し)だと回答をもらえませんよ。
07827752011/07/18(月) 15:11:58.04
>>776
ありがとうございます。
0783デフォルトの名無しさん2011/07/18(月) 15:12:38.15
>>776
Midステートメントで$を付けるのは無意味。
0784デフォルトの名無しさん2011/07/18(月) 15:17:20.83
エクセルにcsv等のテキストファイルをドラッグアンドドロップすると新たにワークブックとして開かれますが、
このときに自動で処理をしたいのですが、これに対応するイベントはあるんでしょうか?
無いとしたらイベント以外になにか方法はありますでしょうか?
0785デフォルトの名無しさん2011/07/18(月) 15:24:28.86
はい771=759です。

言われる通り、少数、負符号は考慮します。それ以外は無いです。
三桁おきのカンマもないです。文字列から数字のみを抽出したいです。

苦肉策として区切りコマンドを実行しマクロ記録する方針でかんがえてます。
もっとスマートにできないかなと思っで書き込みました。
0786デフォルトの名無しさん2011/07/18(月) 17:02:56.46
>785 元データが1列なら、少数やマイナス値を含む数字で区切る処理はこんな風になります。
3桁毎のカンマにも対応するには '← のところを変更してください。
Option Explicit
Dim sh_i As Excel.Worksheet, sh_o As Excel.Worksheet
Dim tate As Long, i As Integer, retsu As Integer
Dim str_i As String, flg As Boolean, flg_sv As Boolean
Dim wk As String, str_o As String, num_o As Double
Sub test()
  Set sh_i = ActiveSheet: Set sh_o = Worksheets("Sheet2")
  tate = 1: str_i = sh_i.Cells(tate, 1).Value
  Do While (str_i <> "")
    retsu = 1: flg = False
続く
0787デフォルトの名無しさん2011/07/18(月) 17:05:05.34
    For i = 1 To Len(str_i)
      wk = Mid(str_i, i, 1): flg = (InStr(1, "0123456789.-", wk) > 0) '←
      If i = 1 Then
        str_o = wk: flg_sv = flg
      Else
        If flg = flg_sv Then
          str_o = str_o & wk
        Else
          If flg_sv Then
            sh_o.Cells(tate, retsu).Value = str_o
            retsu = retsu + 1
          End If
続く
0788 忍法帖【Lv=2,xxxP】 【東電 82.9 %】 2011/07/18(月) 17:07:26.12
          str_o = wk: flg_sv = flg
        End If
      End If
    Next i
    If flg_sv Then
      sh_o.Cells(tate, retsu).Value = str_o
    End If
    tate = tate + 1: str_i = sh_i.Cells(tate, 1).Value
  Loop
  Set sh_i = Nothing: Set sh_o = Nothing
End Sub 以上
07897862011/07/18(月) 17:11:38.07
数字部分だけの抽出ではなく、文字列部分もsheet2に出力したいのであれば、
If flg_sv Then と、これに対応する End If をコメント化してみてください。 
0790デフォルトの名無しさん2011/07/18(月) 17:18:17.06
お手数おかけいたしますが、、、、知恵を拝借いたしたく

http://www.dotup.org/uploda/www.dotup.org1802759.zip.html
解凍パス Excel 中身 testtest.xls

テキストボックスに入っている文字列に対して検索する処理を考えています
sample1では複数の検索対象文字列があっても選択されるのは見つかった最初の
語句のみなんで続けて次の対象文字列も選択させたいの(sample2)、ですが、、
ここで行き詰っています。
---------------------------------------------------------------------
検索用のボタンを押すことによって続けて検索させたいのですが、
Instr関数の部分でエラーになっています。
findpos = 1にすればエラーにはならないものの当たり前のことながらsample1
と変わらない動作になってしまいますし。

sample2においてどうすればいいか教えてください。m(_ _)m
0791デフォルトの名無しさん2011/07/18(月) 17:36:01.39
>>786

771です。ありがとうございました。
いただいたプログラムをサブルーチンに組込み、試してみようと思います。
文字列はどの変数に割り当てるのでしょうか。
結果はどの変数になるのでしょうか
07927862011/07/18(月) 17:50:15.73
>791
入力側の文字列は str_i に入れて先頭から一文字ずつ調べてます。
出力側は str_o に一文字ずつ連結していき、数字かどうかの判定結果が
変わる都度、それまでの str_o を出力側シートに書き込んでいます。

>790
findpos の値をどこかのセルに書き込んでおくのがわかりやすいと思う。
Private Sub UserForm_Initialize() の処理の中に「当該セルに 1 を設定」を
組み込んでおくだけでいいし。
07937862011/07/18(月) 18:12:26.12
自己レス
>786の num_o As double は不要でした。文字列の str_o をこれに
転記してから出力シートに書き込もうかと思って定義してたけど、
str_o を直接書き込んでも問題なかった。
0794デフォルトの名無しさん2011/07/18(月) 19:28:31.68
>>792
790です。もう少し考えてみます
後でまたするかもしれませんが、よろしくです。
0795デフォルトの名無しさん2011/07/19(火) 12:33:37.91
792
771です
何度もすみません
例えば、CELL(1.1)に数字を3つ含む文字列かあったとします。
CELL(1.10)CELL(1.11)CELL(1.12)に出力するにはどうすべきですか
0796デフォルトの名無しさん2011/07/19(火) 12:40:20.97
少しは自分で考えようぜ

>>2
> ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
>    コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
>    ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
>
0797デフォルトの名無しさん2011/07/19(火) 21:54:50.55
そもそもCELL(1.10)ってなんだ?
0798デフォルトの名無しさん2011/07/19(火) 22:06:28.67
とりあえず何を聞きたいのか処理ごとにまとめてくれるESPいないかね
0799デフォルトの名無しさん2011/07/19(火) 23:15:30.78
CELL(1.10)はCells(1, 10)の書き間違いだってエスパーじゃなくてもわかるだろ
この程度のことがわからない役立たずはレス付けるな
0800デフォルトの名無しさん2011/07/19(火) 23:39:26.58
Cells(1, 10)をCELL(1.10)を書き間違えることに寛容なおまいらww
0801デフォルトの名無しさん2011/07/19(火) 23:56:35.17
幼稚園児に怒っても仕方ないだろ
0802デフォルトの名無しさん2011/07/20(水) 00:11:28.41
>>799
そこじゃねえよ

>>771から続いてる流れが、結局どこを目指してるのかを聞かせてくれ
何をしたがっててどういう状況で果たしてどのような処理をしたいのだろうか

この程度のことがわからない役立たずはレス付けるな
0803デフォルトの名無しさん2011/07/20(水) 02:40:21.35
CELL(1,10)をコンパイル時にCells(1,10)にできないやつはレスつけるな
0804デフォルトの名無しさん2011/07/20(水) 05:24:13.30
>>802

        ____
        /     \
     /   ⌒  ⌒ \   何言ってんだこいつ
   /    (●)  (●) \
    |   、" ゙)(__人__)"  )    ___________
   \      。` ⌒゚:j´ ,/ml j゙~~| | |             |
__/          \  |__| | |             |
| | /   ,              \n||  | |             |
| | /   /         r.  ( こ) | |             |
| | | ⌒ ーnnn        |\ (⊆ソ .|_|___________|
 ̄ \__、("二) ̄ ̄ ̄ ̄ ̄l二二l二二  _|_|__|_
0805デフォルトの名無しさん2011/07/20(水) 06:18:03.19
何がやりたくてどこに向かってるかよくわからんのは確かだが
とりあえず>>795は正規表現覚えたほうがいいんじゃね
CELL(1.1)はCells(1,1)だとして、マイナス記号と小数点も考慮すると
(俺も正規表現あんまり自信ないんだが)
Sub test()
    Dim regEx, Matches, Match
    Dim col As Integer
    Set regEx = CreateObject("VBScript.RegExp")
    regEx.Pattern = "-?\d*\.?\d+"
    regEx.Global = True
    Set Matches = regEx.Execute(Cells(1, 1).Text)
    For Each Match In Matches
        Cells(1, 10 + col).Value = Match.Value
        col = col + 1
   Next
End Sub
でいけるんじゃね
とりあえずこれ理解するまで勉強してくれ
0806デフォルトの名無しさん2011/07/20(水) 09:54:25.54
仮にエクセルのB列にURLの一覧があるとします。
各ページ内のメタタグを抽出したいです。

C列には「description」D列には「keywords」
を抽出するにはどうすれいいでしょうか?

初歩的な質問かもしれませんが、よろしくお願いします。
0807デフォルトの名無しさん2011/07/20(水) 10:34:31.99
771か?
お礼くらい言っとけよ
0808デフォルトの名無しさん2011/07/20(水) 11:48:43.49
お礼とかいらないから
0809デフォルトの名無しさん2011/07/20(水) 12:04:26.56
回答とかいらないから
0810デフォルトの名無しさん2011/07/20(水) 13:25:03.28
質問とかいらないから
0811デフォルトの名無しさん2011/07/20(水) 14:21:51.37
夢とか
希望とかいらないから
0812デフォルトの名無しさん2011/07/20(水) 14:52:57.70
いらないシリーズごくろうさん
0813デフォルトの名無しさん2011/07/20(水) 17:21:04.88
ねぎらいとかいらないから
0814デフォルトの名無しさん2011/07/20(水) 20:45:13.30
>>786
771です。プログラム実行しました。
たいへん役に立ちそうです。ありがとうございました。

一つだけ気になった点。sheet1に、もし空白行があったらそこで
アウトプットがとまってしまうようです。この辺も改善できればお願いします。
0815デフォルトの名無しさん2011/07/20(水) 20:49:10.63
VBAは初めてです。回答よろしくお願いします。

★1 OS:xppro Excelのバージョン:2003
任意の選択したセル(複数可)の行番号をコピー、その後、コピーした行番号をペースト
というのをショートカットキーを使う形でつくりたいと考えています。

詰まってるところは、�@行番号のコピー方法。(ROW関数を上手いこと使えばいいのかなと思っています)
�Aペーストの方法。(普通にCtrl+Vでも可能なのでしょうか?)

なにぶん初めてなもので、書き方もよくわかっていません。よろしければ初心者向けの参考サイトなども教えていただけないでしょうか?
0816デフォルトの名無しさん2011/07/20(水) 20:55:12.00
>>807

771です
見る暇もなく返信遅れたようです。
0817デフォルトの名無しさん2011/07/20(水) 21:03:33.82
>>806
ひとつの方法として
1. IEオブジェクトを生成し B列にあるURLでページを開く
2. ページを開いたIEオブジェクトからメタタグの情報を取得する
って感じかな?
0818デフォルトの名無しさん2011/07/20(水) 23:45:22.40
>>815
コピー、ペーストってのは、基本的にはクリップボードに対する情報のやりとりなので
�@コピー処理でクリップボードに値をセットしてあげれば、�A貼り付けは普通に行える
クリップボードに対する処理はググれば出てくる。簡単なサンプル書いてみた

Sub rownumberCopy()
    Dim r, c
    Dim s As String
    Dim cb As New DataObject
    Set r = Selection
    If TypeName(r) <> "Range" Then
        Exit Sub
    End If
    For Each c In r
        s = s & CStr(c.Row) & vbCrLf
    Next
    cb.SetText s
    cb.PutInClipboard
End Sub

選択範囲が複数列だったらどうするとかは考慮してない

VBA初心者なら、サイトよりなんか入門書を買う方がいいと思うが
ある程度使えるようになれば後はググれば大概なんとかなる
0819デフォルトの名無しさん2011/07/21(木) 00:14:40.61
ググったことしかないから俺はいつまでたっても底辺なのか…
0820デフォルトの名無しさん2011/07/21(木) 13:56:52.70
806です。
>>817さん、そのやり方だと、ちょっと時間が掛りすぎてしまいませんか?
できれば、スマートに出来ればありがたいのですが・・・。
どなたか教えてください!お願いします!
0821デフォルトの名無しさん2011/07/21(木) 15:02:36.08
>>820
スマートで速い方法なんて無い。
08228172011/07/21(木) 15:15:50.64
>>820
スマートにですか.....ふむ

スマートかどうか?だけど
実際自分が過去にやった事がある方法を紹介してみる

該当URLのHTMLファイルをダウンロード(APIの"URLDownload"なんかで)した後
VBAでテキストファイルとして読み込ませてしまう
あとは文字列検索(InStr関数とかMid関数とかとか駆使して)目的の情報をさがす

・HTMLファイルがShiftJIS以外で書かれていたら文字コード変換しないとダメだったりする
・実行時の見た目はスッキリするけど コードは複雑になるかも
08238172011/07/21(木) 15:24:32.28
誤 APIの"URLDownload"なんかで
正 APIの"URLDownloadToFile"なんかで
0824デフォルトの名無しさん2011/07/21(木) 16:59:13.56
>>820
スマートと言うなら、Excelではなく、javascript使ったら?

コード変換もいらない

で、その結果Tableにでも出力してExcelに張り付ける

jquery メタタグ で検索かければ参考にはなると思う

板違いはゴメンだけど
08258172011/07/21(木) 18:29:49.12
>>820
この種のWebページの情報取得 自動化は
相手サーパに負担をかける恐れがある事を承知しておいてね

実際 >>822 の開発時 コードがループしてしまい
相手サーバーから IPブロックされた事があるんで
(そん時は、たしか1週間ぐらいアクセスできなかった)
0826デフォルトの名無しさん2011/07/21(木) 19:17:52.46
岡崎市図書館事件の中の人ですか?
08278172011/07/21(木) 19:23:41.93
ちがうよ
自分の場合は、とある"海外のHサイト"を巡回する為に 作成した時のことなので
0828デフォルトの名無しさん2011/07/21(木) 22:10:24.79
すいません
accessで、DataGridを使ってデータを表示したいんですがやり方がわかりません。
DataGrid.value や DataGrid.Textにデータを入れようとすると行番号が不正ですというようなエラーが出ます。
何か設定が足りないようなんですが、なんかサンプルないでしょうか?
0829デフォルトの名無しさん2011/07/21(木) 22:57:20.68
丸投げしといてもっとスマートなやり方とかどんだけ高貴なお方だよww
0830デフォルトの名無しさん2011/07/21(木) 22:59:09.42
>>828
>>2
0831デフォルトの名無しさん2011/07/22(金) 13:12:49.86
>>829
ちょっとくぐったら
件のお方 他質問サイトへも投稿してるみたいね
ttp://okwave.jp/qa/q6890739.html
これ自体 悪い事とは思わないけど

CreateObject("MSXML2.XMLHTTP")を使った
タイトルを抽出するコードは、教えてもらった事あるみたいだから
それの応用だけなんだけどなー

自分でなんとかしようとする気ナッシングだね
0832デフォルトの名無しさん2011/07/22(金) 15:12:38.29
すいません。ぐぐっても原因がわからないので質問をば…

セルに入力された値が「-1のとき…追加する」「1のとき…使用する」「2のとき…削除する」になるように、
RangeのNumberFormatへ表示形式を設定したいのですがうまくいきません。

もしわかるのであれば、その部分だけのコード教えていただけるとありがたいです。

また、条件が2個の状態の場合設定できるのですが、条件が3個になったとたんエラーになります。
NumberFormatへの登録数上限があるのでしょうか?
0833デフォルトの名無しさん2011/07/22(金) 16:54:05.66
806です。
他のサイトで教えていただき解決しました。
大変お騒がせしました。
0834デフォルトの名無しさん2011/07/22(金) 20:20:39.52
>>832
NumberFormatはセルの表示形式を指定するものなのに
条件が2個、3個って一体何の話なんだ?
0835デフォルトの名無しさん2011/07/22(金) 21:35:56.15
>>832
公式なドキュメントになぜかあまり具体的な記述がないけど、
仕様は以下のとおりで、最初の2つまでしか条件は書けない
http://excel.life.coocan.jp/index/indexcell_disp_skoron_j.html

あえてやりたいならVBAを使って
Worksheet_Change
で現在のセルの値を見て、動的に NumberFormatLocal で設定するとか、ちょっと無理をする必要がありそう
0836デフォルトの名無しさん2011/07/22(金) 23:16:25.37
正負以外に任意の条件書けるとはしらなかった
0837デフォルトの名無しさん2011/07/23(土) 01:09:34.53
IE使わずにhtmlソースを取得するのってどうやるの?
0838デフォルトの名無しさん2011/07/23(土) 01:14:52.59
XMLHTTPでも使えば?
スレ違いだし、腐るほどサンプル転がってるから詳細は省くが
0839デフォルトの名無しさん2011/07/23(土) 01:28:26.99
>>838
大体理解できました。ありがとうございます
もう一つ質問したいのですが
板のURL(例えばhttp://hibari.2ch.net/tech/)を入力したら
現行のスレッドタイトルをA列に、そのスレッドのURLをB列に取得したいのですがどのようにすればいいでしょうか
0840デフォルトの名無しさん2011/07/23(土) 06:37:06.02
「板のURL」を「板のスレッド一覧のURL」に変換して
そいつを取得して解析して、解析結果をセルに代入すれば良いだけだよ

でも、URLの変換やsubject.txtの解析は
Excelとはなんら関係のないスレ違いな話なので詳細は省くが

とにかく、>>2★3,★4に該当するスレ違い、ルール違反な質問なので
もうこの件ではここで質問しないでね
0841デフォルトの名無しさん2011/07/23(土) 07:56:54.26
わかる人だけ解答してください
0842デフォルトの名無しさん2011/07/23(土) 12:07:22.66
わかるけどスレチだから回答しない
知識自慢したいお子様と違って俺はスレのマナーをちゃんと守る大人
0843デフォルトの名無しさん2011/07/23(土) 12:31:02.64
わからないんですね
わかります
0844デフォルトの名無しさん2011/07/23(土) 13:25:43.12
VBAでやりたいならスレチじゃないと思うけど
0845デフォルトの名無しさん2011/07/23(土) 13:48:19.15
>844
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。

 VBAとは、『Visual Basic for Application』の略で
  Application
  ├Workbooks
  |└Workbook
  |  ├Worksheets
  |  |└Worksheet
 というApplication以下のオブジェクトを、VB言語で操作するものを指します。
 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。

0846デフォルトの名無しさん2011/07/23(土) 14:08:23.79
excelのVBAでRange("A1")にある複数行のテキストをA列に1行ずつ分けたいのですがどうしたらいいですか

Range("A1")に
あ
い
う
え
お
ってあるとして、それを
A1 あ
A2 い
A3 う
A4 え
A5 お
としたいのです
0847デフォルトの名無しさん2011/07/23(土) 14:34:17.56
>846 配列からセル範囲に一度に転記ってできたっけ?
Sub test()
 a = Split(Range("A1").Value, Chr(10))
 For i = 0 To UBound(a)
  Range("B1").Offset(i, 0).Value = a(i)
 Next i
End Sub
08488472011/07/23(土) 14:38:51.25
847はテストのためにB列に出力するようにしましたが B1 を A1 にしたらいいです。
0849デフォルトの名無しさん2011/07/23(土) 14:41:59.66
おお!ありがとうございます!
0850デフォルトの名無しさん2011/07/23(土) 22:39:55.27
>>847
やってみた

Sub Sample()
a = Split(Range("A1").Value, Chr(10))
Cells(1, 1).Resize(UBound(a), 1).Value = WorksheetFunction.Transpose(a)
End Sub
0851デフォルトの名無しさん2011/07/24(日) 05:08:46.45
ここは微積分もC#もできない僕チンが
ぶいびーえーででかい面するスレなんだから
スレチな話は僕チンのわかる範囲にしてください><
0852デフォルトの名無しさん2011/07/24(日) 08:20:32.67
嫌味のつもりなのかもしれないが、全然効果が無い件について
08538472011/07/24(日) 09:20:59.93
>850
ワークシートファンクションはほとんど使ったことがありませんでした。ありがとうございます。
0854デフォルトの名無しさん2011/07/24(日) 23:05:54.80
A1=0.6 B1=A
A2=0.3 B2=B
A3=0.1 B3=C

と記入してあって、
A列の通り60%の確立でB列の"A"を、30%の確立で"B"を選ぶ
というのをさせたいのですが、どうしたらいいでしょうか?
知恵を貸してください。
0855デフォルトの名無しさん2011/07/24(日) 23:19:18.40
ネズミ−RND
0856デフォルトの名無しさん2011/07/24(日) 23:29:34.74
>>854
A1〜A3を配列にいれる(仮に変数AA)
100倍する

AA(1):60、AA(2):30、AA(3):10

AA(1)にはそのまま、AA(2)にはA1-A2の合計、AA(3)にはA1-A3の合計のように数字を足しこんだ値とする

AA(1):60、AA(2):90、AA(3):100

合計を求める(この場合は100)
ここまでが準備

値の選択では、RND関数を使ってまず合計値まで(0から99まで)の乱数 N を生成し、

N <AA(1) (0から59までの値) なら1番目
AA(1)<= N <AA(2) (60から89まで) なら2番目
AA((2)<= N (90以上) なら3番目

が選択されたとみなす
もっとうまいやり方がありそうだけど、ぱっと思いつくのはこんな感じ

…考えたら整数にする必要もないし、配列AAを用意する必要すらないかもしれんが
0857デフォルトの名無しさん2011/07/24(日) 23:57:37.00
>>856
ありがとうございます
0858デフォルトの名無しさん2011/07/25(月) 00:47:35.09
>>854
Sub aaa()
  r = Rnd(1)  '乱数を発生
  
  s = 0
  i = 1
  Do
    s = s + Cells(i, 1)
    If r < s Then b = Cells(i, 2)  '確率に従ってB列のデータを選ぶ
    i = i + 1
  Loop Until b <> "" Or i > 3  'ここにデータの個数を書く

  Debug.Print b  '結果の表示
End Sub
0859デフォルトの名無しさん2011/07/25(月) 04:31:07.13
スレチだがそのパターンだけだとして
=IF(RAND()<A1,B1,IF(RAND()<(A2/(1-A1)),B2,B3))
0860デフォルトの名無しさん2011/07/25(月) 06:42:01.60
その並び順なら
0.6  A   1 ←=A1+C2
0.3  B 0.4 以下同様
0.1  C  0.1 
という表を作って=INDEX(B1:B3,MATCH(RAND(),C1:C3,-1))でいいんじゃね?
普通は下のような昇順の表を作って=LOOKUP(RAND(),A1:B3)
0   C
0.1  B
0.4  A
0861デフォルトの名無しさん2011/07/25(月) 06:44:53.82
なんだここはVBAスレか
0862デフォルトの名無しさん2011/07/25(月) 09:16:03.35
>>859
それ違う
0863デフォルトの名無しさん2011/07/25(月) 09:26:24.70
>>835
832です。
ご回答ありがとうございました。やっぱり2つまでしか設定できないんですね。
もうちょっと試行錯誤してみます。
ありがとうございました。
0864デフォルトの名無しさん2011/07/25(月) 09:38:57.28
>>862
答えは合うよ?
条件が多いとLOOKUPの方が簡単だと思うが。
0865デフォルトの名無しさん2011/07/25(月) 11:31:27.63
>>864
ワークシート関数を一から勉強し直せ
0866質問させてください�@2011/07/25(月) 12:15:03.97
セルに数式を直接入力したいと思い、VBAで以下のような記述を行っていますが、セルに設定したい変数が
EXCEL上にそのまま出力されてしまい、思うように動作してくれません。
(入力する数式をVBE上でDebug.printを用いて見てみたところ、変数の値は想定通りに変化していました)
どのあたりにミスがあるのか、教えていただけませんか?よろしくお願いいたします。

0867質問させてください�A2011/07/25(月) 12:53:55.39
※>>866の続きです。

�@:入力したい数式を別に用意
   Dim CalcStr As String
   CalcStr = "=IF(ISERROR(SetSh & ""!"" & ""CN"" & HikGyo),"""",IF(SetSh & ""!"" & ""CN"" & HikGyo = """","""",SetSh & ""!"" & ""CN"" & HikGyo))"
   (EXCEL上では、上記式の右辺の内容がそのまま出力されてしまう。変数SetSh、HikGyoはその名前のまま、『&』もそのまま)

�A:設定した数式を、任意のセルに設定
   ActiveSheet.Range("DD" & MyGyo).Formula = CalcStr
0868デフォルトの名無しさん2011/07/25(月) 13:35:41.82
セルにセットした数式みると、セルを指定してないね

実際は、こんな数式をセルにセットしたいのかなぁ?
=IF(ISERROR(テストシート!CN100),"""",IF(テストシート!CN100 = """","""",テストシート!CN100))
0869デフォルトの名無しさん2011/07/25(月) 13:45:55.41
>>867
CalcStr = "=IF(ISERROR(" & SetSh & "!" & CN & HikGyo & "),"""",IF(" & SetSh & "!" & CN & HikGyo "="""",""""," & SetSh & "!" & CN & HikGyo & "))"
0870867,8682011/07/25(月) 14:31:38.34
>>868

セットしたい数式は、まさにおっしゃる通りのものです。
SetShがシート名(String型配列から取り出す)、CNは列指定のための文字列(固定)、SetShは行数(処理の進行に応じて加算)です。

�Aの式だけだと、セルに数式を設定したことにはならないのでしょうか。
というよりも、�@の段階でセルを設定する必要がある、という解釈が正しいのでしょうか。


0871867,8682011/07/25(月) 14:52:54.11
>>869

修正版の提示、ありがとうございます!

�@:ISERRORの後の括弧も文字であるため、&で連結する必要があった
�A:変数の部分に関しては""で括る必要がない(=文字列のみ2重のダブルクォートで囲めばよい)と考えていた

であるということでしょうか。
ひとまず、家の環境で試してみます。

※スレのルールを無視して申し訳ありませんでした。
この問題で悩んでいる環境は、WindowsXP・Excel2003という環境です。
これから試してみる環境は、Windows7・Excel2010です。
0872デフォルトの名無しさん2011/07/25(月) 16:17:39.99
こういう低レベルな処理で訳解らなくなってる奴って、
大抵連結で繋ぎすぎとか入れ子を重ねすぎとかやらかしてるよね
能力もないのにベテランぶって一括一発で処理を書こうとするから解らなくなる

CellAddress = "CN" & HikGyo
CellPath = SetSh & "!" & CellAddress
とかやって、3ヶ所有る「SetSh 〜〜〜 HikGyo」を「CellPath」に変えるだけでも
かなり解りやすいコードになるはず

CalcStr = "=IF(ISERROR(" & CellPath & "),"""",IF(" & CellPath & "="""",""""," & CellPath & "))"
0873デフォルトの名無しさん2011/07/25(月) 18:22:48.81
> CalcStr = "=IF(ISERROR(" & CellPath & "),"""",IF(" & CellPath & "="""",""""," & CellPath & "))"
これがベテランのコードですか。
0874デフォルトの名無しさん2011/07/25(月) 20:56:28.40
VBAのベテランつうのも何かな
0875デフォルトの名無しさん2011/07/25(月) 22:19:07.48
妥協点としては悪くないよ。
ワークシートの数式なんて元々泥臭くなりがちだし。
0876デフォルトの名無しさん2011/07/26(火) 00:24:25.71
>>873
それが最良の正解って事ではなく、方法論の一つとして
CalcStr = "=IF(ISERROR(SetSh & ""!"" & ""CN"" & HikGyo),"""",IF(SetSh & ""!"" & ""CN"" & HikGyo = """","""",SetSh & ""!"" & ""CN"" & HikGyo))
よりは
CellAddress = "CN" & HikGyo
CellPath = SetSh & "!" & CellAddress
CalcStr = "=IF(ISERROR(" & CellPath & "),"""",IF(" & CellPath & "="""",""""," & CellPath & "))"
の方が良いだろってだけの話じゃねーの?
0877超ベテラン2011/07/26(火) 03:53:04.47
まー一人で触るもんなら最終的に文字数が短くなるのがジャスティス
0878デフォルトの名無しさん2011/07/26(火) 10:37:38.10
>>865
俺は859じゃなく860なんだが、お前がワークシート関数に詳しいとは思えんなぁ。
0879デフォルトの名無しさん2011/07/26(火) 10:56:48.74
>>860の補足だが
0.6 A  0
0.3 B  0.6 ←=C1+A1
0.1 C  0.9 ←=C2+A2
こんな表作って=LOOKUP(RAND(),C1:C3,B1:B3)でもよかったな。
INDEXとMATCHを使うまでもなかったわ
0880デフォルトの名無しさん2011/07/26(火) 12:14:57.86
>>859の式って40%の確率でサイコロを2回振ることになるけど、それで正確な確率が求まるの?
1つの式の中ではRAND()は1回にしないとまずいんじゃない?
0881デフォルトの名無しさん2011/07/26(火) 12:27:26.64
>>880
求まる。
10万個くらい式を入力して数えたら?
=IF(RAND()<A$1,B$1,IF(RAND()<(A$2/(1-A$1)),B$2,B$3))
0882デフォルトの名無しさん2011/07/26(火) 12:42:10.77
別にさいころを二度振っても答えは出る。
頭の固いやつは理解出来ないのかなぁ。
865=880なのか?
0883デフォルトの名無しさん2011/07/26(火) 21:04:50.59
大学の情報科学の課題です、まったくてがつけられていないです・・・
回答よろしくお願いします。


反応速度式が次式で表される二次反応がある。
t=0におけるAの濃度が[A0]である時、[A]の時間変化を数値計算を用いて求めるプログラムを作成せよ(エクセルVBA)。尚、kは下表を用い、A0は任意に入力できるようにする。

−d[A]/dt=k[A]^2

反応 k/L mol^-1s^-1
2NOBr→2NO+Br2 0.80
2NO2→2NO+O2 0.54
H2+I2→2HI 2.42×10^-2
D2+HCl→DH+DCl 0.141
2I→I2 7×10^9
H++OH-→H2O 1.5×10^11

質問はここであっていたでしょうか・・??
0884デフォルトの名無しさん2011/07/26(火) 21:06:57.31
質問スレではあるがお前が思っているような場所ではない
帰れ
0885デフォルトの名無しさん2011/07/26(火) 22:27:43.29
ただいま
0886デフォルトの名無しさん2011/07/26(火) 22:39:33.05
ただいマンボウ
0887デフォルトの名無しさん2011/07/27(水) 06:36:00.31
>>883
そういうのは大学で聞けよ
何のために大学行ってるんだよ?
自分の知らないことを教えて貰うためだろ

今、大学以外で教えを乞うて、大学では自力で課題をこなしたかのように見栄を張ってもなんにもならない
解らないことは解らないと正直に言って、きちんと教わってこい
0888デフォルトの名無しさん2011/07/27(水) 07:38:10.69
ユーザーフォームでもシートでも場所はどこでもいいので何かファイルをD&Dしたら
そのファイルのパスを取得したいのですがどうしたらできますか?
0889デフォルトの名無しさん2011/07/27(水) 07:47:14.33
>>888
Excel2003のVBAにて、ファイルのドラッグ&ドロップでファイルパスとファイル名の...
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1317565268

やりたいのはこれ?
0890デフォルトの名無しさん2011/07/27(水) 07:49:29.40
>>889
おぉありがとうございました
調べてから質問するようにします
0891デフォルトの名無しさん2011/07/27(水) 07:53:00.68
これってユーザーフォームでも同様にできるんですか?
0892デフォルトの名無しさん2011/07/27(水) 08:07:18.65
859ですが一瞬でもラウンドを2回まわすような式は避けるのがジャスティス
0893デフォルトの名無しさん2011/07/27(水) 10:50:13.38
本人がそう言うなら仕方ないが、俺にワークシート関数を一から勉強しなおせって言ったやつどこ行った?
答えが出ることも理解できない馬鹿なんだから、あまり偉そうなこと言わん方がいいね。
0894デフォルトの名無しさん2011/07/27(水) 11:34:02.42
Openoffice使ってVBA勉強したくなったんだが、正直何から手つけて良いのかわからん
オススメの本とかある?
0895デフォルトの名無しさん2011/07/27(水) 12:38:50.05
>894
素直にExcel使った方がいいんじゃないかな?
ダウンロードして2ヶ月お試しして、身につかなかったらあきらめる、でいいのでは?
(さらに使いたければ内部カレンダを巻き戻す、と)
0896 【東電 75.1 %】 2011/07/27(水) 13:08:01.94
>894
KingsoftOfficeのことかな?
0897デフォルトの名無しさん2011/07/27(水) 13:38:24.36
>>894
OpenOfficeはいい参考書が少ない
素直に本物のExcelの期間限定版を無料ダウンロードした方がいい
あと、本を買うときはちゃんと2010に対応したやつを選ぶこと
バージョンが違うとメニューのデザインなんかが変わるから、初心者はそこでつまづく
0898デフォルトの名無しさん2011/07/27(水) 15:43:46.71
仕事で使っているファイルの印刷範囲指定を楽にするため、マクロ記録を使いながら
フォームコントロールで印刷ボタンを作りました。
ただ、その顧客情報によってファイルの名前を変えて一つ一つ保存している為、
ファイル名が変わると印刷マクロが機能しません。
他の方法を調べた結果、アドインとして登録しようと思い、早速実行してみました。
が、「実行時エラー424 オブジェクトが必要です」と表示され動きません。
ネットで調べながらやってはいるのですが、どこを修正すべきなのか分かりません……
申し訳ありませんが、お知恵を貸して頂けないでしょうか?
以下がそれぞれの式になります。

1:アドイン(ファイル名=印刷アドイン)
Sub印刷マクロ()
'
If (vbYes <> MsgBox("印刷します。よろしいですか?", vbYesNo)) Then
Exit Sub
End If

Range("A1:Z41").Select
ActiveSheet.PageSetup.PrintArea = "$A$1:$Z$41"
ActiveWindow.SelectedSheets.PrintOut Copies:=1
ActiveSheet.PageSetup.PrintArea = ""
End Sub

2:実行用マクロ
Sub テスト()
‘
Application.run macro:=”印刷アドイン!印刷マクロ”

End Sub
0899デフォルトの名無しさん2011/07/28(木) 09:16:56.73
まずはエラー箇所の特定を。
そのメッセージボックスで中断だかってボタンあるでしょ?
それでわかるはず
0900デフォルトの名無しさん2011/07/28(木) 11:33:24.46
ちょっと教えて下さい。
テキストファイルをOpen Input で読み込んで、例えば
===== hello =====
の行を半角空白でsplitしてhelloの文字列を抜き取りたいのですが
splitするときに、先頭に=があるとアプリケーション定義またはオブジェクト定義のエラーです。と怒られるのですが、なぜエラーになるのでしょうか。また回避するベストな方法は何でしうか。
宜しくお願い致します。
0901デフォルトの名無しさん2011/07/28(木) 11:36:20.99
底の部分のコード晒しなさいよ
0902デフォルトの名無しさん2011/07/28(木) 12:06:34.20
>>900ですが解決しました。ありがとうございました。
0903デフォルトの名無しさん2011/07/28(木) 23:20:45.41
コマンドボックスの内容が変わったら別のプロシージャを呼び出し
そのプロシージャ内でComboBox1の内容を判断して
果物だったら"いちご" "みかん"等をComboBox2から選びたいのですが
一番したの行からどのように記述すれば良いか悩んでいます。
分かる方どのようにすれば良いのかアドバイス頂けると助かります。
よろしくお願いします。

Private Sub UserForm_Initialize()
With ComboBox1
.AddItem "果物"
.AddItem "野菜"
End With
End Sub

Sub ComboBox1_change()
Dim a As String
Call test(a)
End Sub

Sub test(ByVal a As String)
0904デフォルトの名無しさん2011/07/29(金) 00:20:48.48
前も見たような気がしなくもない
0905デフォルトの名無しさん2011/07/29(金) 00:41:37.10
>>903
testの引数のaはどうする予定なんだ?
多分こんな感じだろ

Sub ComboBox1_change()
    Call make_combo2(ComboBox1.Text)
End Sub
Sub make_combo2(s As String)
    ComboBox2.Clear
    Select Case s
        Case "果物"
            ComboBox2.AddItem "いちご"
            ComboBox2.AddItem "みかん"
    End Select
End Sub
0906デフォルトの名無しさん2011/07/29(金) 00:53:26.74
他の方法として 選択肢が少ないなら
Sub test(ByVal a As String)
 Select Case a
  Case "果物": ComboBox2.List = Array("いちご", "みかん", "ぶどう")
  Case "野菜": ComboBox2.List = Array("だいこん", "とまと", "こぼう")
 End Select
End Sub
とか
あとは.RowSource 使ってシートからもってくるとか
0907デフォルトの名無しさん2011/07/29(金) 06:21:42.56
ユーザーフォームの実行1回に対して、ComboBox1の選択は基本的に1回しか行わないなら
AddItemで一つずつ入れたり、逐一Arrayで配列作ったりしてもいいけど
ComboBox1を何度も選択変更するならこうだな

Private buf As Collection

Private Sub UserForm_Initialize()
  Set buf = New Collection

  ComboBox1.AddItem "野菜"
  buf.Add Array("にんじん", "たまねぎ", "じゃがいも"), "野菜"

  ComboBox1.AddItem "果物"
  buf.Add Array("りんご", "みかん", "かき"), "果物"
End Sub

Private Sub ComboBox1_Click()
  ComboBox2.Clear
  ComboBox2.List = buf(ComboBox1.Text)
End Sub

一度しか実行されない UserForm_Initialize は多少複雑になってもいいから
何度も実行される ComboBox1_Click の処理量を減らす
0908デフォルトの名無しさん2011/07/29(金) 08:10:34.66
>>899
返信遅れました、すみません

メッセージボックスの表示は「はい」か「いいえ」しか表示されていません……
範囲指定〜印刷までの式か、アドイン登録の方法か、どちらかが間違っているんでしょうか?
09099032011/07/29(金) 14:28:59.51
>>905-907
答えてくださってありがとうございます。
一つのプログラムに対してもいくつも方法があるんですね。
ホントありがとうです。
0910デフォルトの名無しさん2011/07/29(金) 14:54:44.44
>>908
実行時エラーのでたコードを特定しないと前に進まないと思うよ
EXCELのバージョンによるかもだけど
エラーメッセージが出たとき「デバック」が選べるはず

実行時エラーのでたコードが特定されてないので
違ってるかもだけど ちょっと気になった点を

アドインは開いていないと 通常使えないハズだけど開いている?
(Excel本体では見えないけど VBEからだと確認できる)
あと
アドイン・ファイル名は 印刷アドイン.xla とかじゃない?
Application.run macro:="印刷アドイン.xla!印刷マクロ"
だと思うんだけど
0911デフォルトの名無しさん2011/07/29(金) 16:02:21.24
>>910
アドバイスありがとうございます。
仰る通り、アドイン名.マクロ名で打ち込んだらファイル名を変えても問題なく動作しました。
無知な質問にお答え頂き本当にありがとうございました。

0912デフォルトの名無しさん2011/07/30(土) 01:36:12.16
複乳さんに質問なのじゃが
VBAでpersonal.xlsbを作る方法は、マクロの記録でダミーのを作ってから、以外にありますか?
0913デフォルトの名無しさん2011/07/31(日) 02:35:41.66
vbaでクローラ作るのって無謀っていうか馬鹿ですか?
0914デフォルトの名無しさん2011/07/31(日) 02:54:23.95
>>913
クロールする範囲にもよるけどVBAじゃ効率悪いと思う
0915デフォルトの名無しさん2011/07/31(日) 03:05:37.35
2chの指定した板の中を延々と特定の文字列が含まれたレスを見つけるまでクロールする奴です
考えているのはsubjectから板一覧を取得してそこからdatを一つ一つ見ていくというものなんですがやっぱVBAじゃやめたほうがいいですか
0916デフォルトの名無しさん2011/07/31(日) 03:40:36.89
>>915
たしか連続で読み込みを続けるとアクセス規制されるんじゃなかったっけ?
0917デフォルトの名無しさん2011/07/31(日) 04:58:38.36
>>913
VBで作ってからvbaで実現する方法考えたほうが絶対に早い
読み込みだけなら割とすぐに作れる。書き込みはかなり面倒だけど
vbaはクラス作るのもややこしい上、面倒
0918デフォルトの名無しさん2011/07/31(日) 13:11:01.72
>>913
馬鹿かどうかは判らんが友達にはなりたくないタイプ
0919デフォルトの名無しさん2011/07/31(日) 13:37:59.87
本では標準モジュールにコードを書くよう指導されてますが
SheetやThisWorkbookにコードを書く是非や長所・短所について教えてください
0920デフォルトの名無しさん2011/07/31(日) 13:52:44.08
長所や短所なんてのは、特性に対して個々が勝手に判断するものだ
同じ特性でも、人によって長所に感じることも有れば短所に感じることもある
自分のプログラミングスタイルの変化によって、以前は短所に思えていた特性が
長所に思えるようになることもあるし、その逆も然り

なので、長所や短所という視点ではなく、それぞれの特性という視点で情報を集め
それらが長所か短所かは、自分の作る物やプログラミングスタイルに照らし合わせて
自分で判断しな

で、標準モジュール、クラスモジュール、ブックやシートの付随モジュールそれぞれの特性は
ググればいくらでも出てくるから自分で調べな
09219192011/07/31(日) 14:06:01.39
アホが釣れてる(藁)
0922デフォルトの名無しさん2011/07/31(日) 14:15:20.78
VBAは結構やってるけどクラスは1回もやったことない
何に使うの
0923デフォルトの名無しさん2011/07/31(日) 14:41:25.06
>>922
真っ当に使うならラップして似非オーバーロードするくらいしか思いつかん
一人で作る分にはあまり恩恵に預かれない
複数人が関わって、標準モジュールだと問題ありの場合に出番だと思う
今時そんな事してるところがあるのかは知らんけど(メンテ除く)
0924デフォルトの名無しさん2011/07/31(日) 16:01:23.27
ある程度VBAは使いこなせてますが
変数やプロシージャのスコープのことがさっぱりわからないんです。

分り易く理解するコツや
こう考えたりこうイメージしたら分りやすいよ
みたいなアドバイスはありますか?
0925デフォルトの名無しさん2011/07/31(日) 16:17:25.96
load
initialize
show
の違いは何かと聞いておるのだ
0926デフォルトの名無しさん2011/07/31(日) 17:01:02.89
>>922
エクセルのセルが優秀すぎて、VBAだとほとんど出番が無い
0927デフォルトの名無しさん2011/07/31(日) 18:50:28.13
>>921
真っ当な意見に、論で言い返せない故の悔し紛れ?
0928デフォルトの名無しさん2011/07/31(日) 19:24:57.20
優秀過ぎてというか
下手に手を出すと地獄を見そうだから
触らぬ神に祟り無しっていう態度
0929デフォルトの名無しさん2011/07/31(日) 22:35:48.28
いろんなbookやsheetを扱ってるとき
単に cells(1,1).value とすると、どこのbookのどのシートを指しますか?

これに関連して、
activeとかselectの概念って、
ある時において、bookもsheetもcellのそれぞれについて、activeなものとselectされてるものが存在してるのでしょうか?
0930デフォルトの名無しさん2011/07/31(日) 22:56:10.07
1.activebook.activesheet

2.yes
0931デフォルトの名無しさん2011/07/31(日) 22:56:58.54
>>929
ええとね、まずアプリケーションが一番上にいて、
その中にActiveなBookがいて、更にその中にActiveなSheet、SelectされたSheetがいて、
更にその中にSelectされたRangeやActiveなCellがいるんじゃない?
だから何も考えずに複数のBookを扱って対象のBookを選ばずにActiveなBookに対して処理を行うと、
本当は違うBookに処理を行いたかったのに、最後に開いたBookを処理しちゃったり
する様なことが起きるんだと思うよ。
0932デフォルトの名無しさん2011/07/31(日) 23:06:23.23
実数を扱うとき
SingleとDoubleは、どっち使ったほうが使いやすいですか?

場合によるだろうけど一般的な話で。
0933デフォルトの名無しさん2011/07/31(日) 23:11:21.01
>>929
標準モジュールの場合はアクティブなブックのアクティブなシート、
シートモジュールの場合は、そのモジュールの属するシート、
ブックモジュールの場合、Cellsは標準モジュールと同じでアクティブなブックのアクティブなシートだが、
Worksheetsは、アクティブなブックのものではなくモジュールの属するブックのものになる。

activeとselectは、単一のセルやシートに対して有効な操作の対象となっているものがactive、
複数のセルやシートに対して有効な操作の対象となっているものがselect、因みにbookにselectは無い。

文字入力はCtrlキーを押しながら確定しない限り、基本的に単一セルが対象だが、Deleteキーによる消去は複数セルに有効。
シートでも削除や移動は複数シートに対して行えるが、名前の変更は複数選択していても表示状態の単一のシートに対してしか行えない。

このように、セルやシートでは複数に対して有効な操作と、単一のもののみに有効な操作があるのでactiveとselectが存在している。
0934デフォルトの名無しさん2011/07/31(日) 23:14:03.26
>>931
例えばですよ、CTRLを押しながらSHEETをクリックすれば
たくさんsheetが選べますよね
これがたぶん複数のsheetがselectされた状態だと思うんですよ
で、目の前に見えてるsheetがactiveなシート。

複数のsheetを選んでたら[作業グループ]と出るので分かります。
この状態で、「あ」と入力すると、なんとすべてのシートで「あ」が入力されるんです。

ということは、その状態ではactiveセルは各シートごとに複数存在するってこと?
0935デフォルトの名無しさん2011/07/31(日) 23:19:22.74
>>934
Select>Activeってだけだろ
もしかして四則演算ができない人?優先順位って概念は分かる?
0936デフォルトの名無しさん2011/07/31(日) 23:20:57.88
例えばsheetを3つ作って、
それぞれで別のセルを複数選択すると、
なんと各シートで別々の場所のセルが複数選択されてるのと単一のセルがactivateになってるのが各シートで記憶されてるんですよ。

これはどういうこと?
activecellは、常にsheetの数だけ存在する?
0937デフォルトの名無しさん2011/07/31(日) 23:23:50.65
性器のダイハツ券をしました。

もしsheetを複数選択すればその瞬間にすべてのシートにおいて同じセル住所が選択された状態になり、同じセル住所がactivateされた状態になるんですよ。
0938デフォルトの名無しさん2011/07/31(日) 23:32:54.70
また発見。
sheetを複数selectして
マクロでselectionに文字を書き込んだら
その選択したすべてのシートの同じcell番地がすべて文字列で埋まりますわ
0939デフォルトの名無しさん2011/07/31(日) 23:35:53.18
知っとるけのけ?
2つシートをselectしてて
マクロでcells(1,1).value="うんこ"を実行したら
どのシートに「うんこ」と表示されると思う?

(1) 2つのシートのA1
(2) 1つのシートのA1
(3) どちらでもない
0940デフォルトの名無しさん2011/07/31(日) 23:37:22.08
いやぁ、そりゃ複数選択して処理を行っているんだから同じ処理が走ると思うよ。
むしろ、選択して違う処理が走ったら問題じゃないかと思うんだけど。
0941デフォルトの名無しさん2011/07/31(日) 23:39:47.30
>>940
あなたの回答は(1)ですね
残念、はずれ
政界は(2)でした
0942デフォルトの名無しさん2011/07/31(日) 23:40:49.72
ああ、>>940は>>937と>>938へのレスね。
0943デフォルトの名無しさん2011/07/31(日) 23:43:00.88
>>941
一つと言うよりActiveなシートの方に反映されるでしょ?
SelectとActiveはその辺ちょっと違うし。
0944デフォルトの名無しさん2011/07/31(日) 23:44:31.34
次の問題。

2つシートをselectしてて
マクロでactivecell="まんこ"を実行したら
どこに「まんこ」と表示されると思う?

(1) 2つのシートの2つのactivecell
(2) 1つのシートの1つのactivecell
(3) どちらでもない
0945デフォルトの名無しさん2011/07/31(日) 23:53:51.74
>>944
へぇ、両方のシートに反映されるんだ。
これは意外。内部的に一つ目とどう違う処理が走ってるの?
0946デフォルトの名無しさん2011/07/31(日) 23:54:23.80
変数で実数を扱うとき
SingleとDoubleは、どっち使ったほうが使いやすい?
0947デフォルトの名無しさん2011/07/31(日) 23:54:42.43
ユーザフォームのイベントを一時的に禁止する方法はないでしょうか?
下の様にコードを書いているのですが
※P2_StartPage,P2_EndPage はComboBoxです

★の所でChangeイベントが出てしまい正しい初期値が設定できません
UserForm_Initialize実行後は
 P2_StartPage.Value = 1
 P2_EndPage.Value = 1
となって欲しいのですが実際には
 P2_StartPage.Value = ""  '空白
 P2_EndPage.Value = 1
となってしまいます

Changeイベントが出てるのでこうなるのは分かるで
取り合えず今はコードを工夫してなんとか しのいでいますが

そもそもとしてイベントを一時的にでも禁止する方法はないでしょうか?
※Application.EnableEvents = False
を入れてみても止まらなかった

改行が多すぎます!! といわれたので分けます
09489472011/07/31(日) 23:55:20.74
続きです
Private Sub UserForm_Initialize()
  With P2_StartPage
   .ListRows = 10
   For i = 1 To 99
     .AddItem
     .List(.ListCount - 1) = i
   Next
   .Value = .List(0)  '★
 End With
 With P2_EndPage
   .ListRows = 10
   For i = 1 To 99
     .AddItem
     .List(.ListCount - 1) = i
   Next
   .Value = .List(0)  '★
 End With
End Sub

Private Sub P1_StartPage_Change()
  If Val(P1_StartPage.Value) > Val(P1_EndPage.Value) Then
    P1_EndPage.Value = P1_StartPage.Value
  End If
End Sub

Private Sub P1_EndPage_Change()
  If Val(P1_StartPage.Value) > Val(P1_EndPage.Value) Then
    P1_StartPage.Value = P1_EndPage.Value
  End If
End Sub
0949デフォルトの名無しさん2011/07/31(日) 23:55:33.89
>>945
それは複乳さんが答えてくれるよ。
お〜い、いるかな?
0950デフォルトの名無しさん2011/08/01(月) 00:02:04.04
サブルーチンを呼ぶとき、
Call ○○○
と
○○○
と単に書くのと
どっちが望ましい?
0951デフォルトの名無しさん2011/08/01(月) 00:12:29.19
>>950
戻りが欲しいとかでない限り、明示的にcallで呼んだ方が
第三者から見ても後から自分で見てもいいと思うぞ
0952デフォルトの名無しさん2011/08/01(月) 00:20:44.24
>>950
Callを使わないなら括弧で括らない。
何かそんな話をこのスレでずっと前に言ってた様な・・・
まぁ>>951の通りでいいと思う
0953デフォルトの名無しさん2011/08/01(月) 00:24:39.54
>>952
ttp://home.att.ne.jp/zeta/gen/excel/c04p11.htm

こことか読んでみるといいと思うぞ
0954デフォルトの名無しさん2011/08/01(月) 07:40:27.86
自分は引数が無いSubプロシージャを呼び出す時に
明示的にCallを書くことがある位だなあ。
識別子だけで浮いているのが気持ち悪いので。
0955デフォルトの名無しさん2011/08/01(月) 12:21:00.71
>>932
場合による
「一般的」は存在しない
0956デフォルトの名無しさん2011/08/01(月) 12:48:21.55
迷ったらDouble
0957デフォルトの名無しさん2011/08/01(月) 13:35:13.05
Single=計算スピードが速い、メモリ節約、有効桁数が少ない
Double=計算が遅い、メモリ食う、有効桁数が多い(精度が高い)

ちゃんと考えて使い分けろ
0958デフォルトの名無しさん2011/08/01(月) 16:51:12.99
いきなり伸びてるが産業
0959デフォルトの名無しさん2011/08/01(月) 19:41:56.46
わたしはむか〜しBASICという言語で、それこそ「マイコンBASICマガジン」に投稿するほど、BASICの達人でした。
その後プログラミングは全くやってませんが、VBAを始めました。

どの入門書・初心者向けの本を見ても、
「変数のスコープ」だとか、「サブルーチン」をバンバン使う書き方とか、モジュールの概念(標準モジュール・フォームモジュール・シートモジュールの使い分けなど)とか、
一番知りたい情報がないんです。

これらはどのように学べばいいですか?
昔BASICやってたので、プログラムとはどういうものかという知識はあります。
まだ大型書店には行ってませんが、もしそういう本があれば行ってみるつもりです。
0960デフォルトの名無しさん2011/08/01(月) 20:00:37.21
>>959
今は本ではなくネットで勉強する時代に変わりました
本は物理的に大きさが限られているため、現代の複雑なプログラムをすべて説明するのは
場所が足りなくて不可能だからです
「VBA スコープ」などのキーワードで検索してください
0961デフォルトの名無しさん2011/08/01(月) 20:25:34.73
>>959
時代が経過して、今では構造化言語、オブジェクト指向型言語、関数型言語とどんどん様変わりし、
貴方の時代のPGとは考え方も組み方もまるで変わっています。
その中でもVBAは構造化言語とオブジェクト指向言語の中間に位置する、
今の貴方の立場としては比較的覚え易い言語と言えますが、
今後の事を考えると最新のVBやC#などを最初から全て覚え直すつもりで勉強した方が、
周り道の様ですが結局速くいろんな言語に対応出来る様に思います。
特にC#などは、今までやっていたであろうBASICの知識と混合する事なく覚える事が出来るでしょう。
一つの世代が変わった言語でPGを組むと言うのは、それ程までに容易では無いと言えます。
0962デフォルトの名無しさん2011/08/01(月) 22:58:56.01
でも「いつかはCを覚えたい」と思ってるなら先にやっといた方がいいよね
後回しにするといろいろ面倒
知識レベルならともかく、いざ実装しようとすると面倒臭くて死にそうになる
0963デフォルトの名無しさん2011/08/02(火) 02:41:23.34
Dim x as String
x = tes1 & "abc" & qr & "tes2"
ってあったとして(tes1,tes2,は長さ不明の文字列)(qrは長さ不明の数字の文字列)
xの中から"abc"の後ろの数字の部分を抜き取るにはどうしたらいいでしょうか

例えばxが
goiwhabc123oajfa だったら123を返す
とか
fabc1512few だったら1512を返す
こんな感じです
0964デフォルトの名無しさん2011/08/02(火) 02:41:54.08
"tes2"じゃなくてtes2で変数でした
0965デフォルトの名無しさん2011/08/02(火) 07:27:49.71
Val(Mid$(x, InStr(x, "abc") + 3))
超不真面目にやるならこんな感じだな。
0966デフォルトの名無しさん2011/08/02(火) 08:20:06.57
せいきひょうげん!
せいきひょうげんを使う!
0967デフォルトの名無しさん2011/08/02(火) 08:43:33.73
性器表現とは?
露出狂になるんですか?
0968デフォルトの名無しさん2011/08/02(火) 09:20:58.28
つかそれqrそのものじゃないのか?
0969デフォルトの名無しさん2011/08/02(火) 09:28:41.23
Quality of Rifeですか?
0970デフォルトの名無しさん2011/08/02(火) 09:33:04.34
VBではRnd
VBAではRand()

どうにかならんか?
0971デフォルトの名無しさん2011/08/02(火) 09:37:11.15
あれっ
asc("○")ってVBではアスキーコード番号を教えてくれる関数だったと思ったが
VBAでは全角を半角に変える関数になってないか?
0972デフォルトの名無しさん2011/08/02(火) 09:48:42.84
おろどきました。
シート3つあれば、それぞれについてアクティブセルが記憶されてるんです
例えば3つの各シートで全く別のセル住所をアクティブにしておいて
下のマクロを実行するとよく分ります。

Sub てすと()
Sheets(1).Activate
ActiveCell = "うんこ"
Sheets(2).Activate
ActiveCell = "まんこ"
Sheets(3).Activate
ActiveCell = "ちんこ"
End Sub
0973デフォルトの名無しさん2011/08/02(火) 10:20:06.41
何がおどろきなのか判らん
0974デフォルトの名無しさん2011/08/02(火) 10:20:29.36
VBAから他のソフトのボタンとか操作できる?
0975デフォルトの名無しさん2011/08/02(火) 10:22:45.23
Excel 2003 , Win7 で、
ワークシート上に、スクロールバーを置いて、それにより、セルの値を増減させたいです。
しかし、うまくいきません。
・スクロールバーを右clickして、そのプロパティを出します。
・LinkedCell の値に、Sheet1!B10などと、表示したい目的地のセルを書き込みます。
・しかし、プロパティの枠の中のLinkedCellの枠に「Sheet1!B10」と打ち込んで、
 リターンをすると、そのプロパティの枠の中が消えてしまい、
 真っ白になってしまいます。何度やっても書き込めません。
・スライドバーやスピンボタン、どちらもできませんでした。

スライドバーやスピンボタンで、指定したセルの値を変化させる方法は、
上記では間違っているでしょうか?
どうやってやれば実現するでしょうか?

宜しくお願いします。
0976デフォルトの名無しさん2011/08/02(火) 10:57:39.30
>>974
できるけどSendMessageとかAPI使うしボタンのハンドル取得するまでが大変
UWSとか他アプリを操作するソフトをShellで起動した方が簡単
0977デフォルトの名無しさん2011/08/02(火) 11:13:10.62
Form_InitializeとForm_Loadの違いとは?
0978デフォルトの名無しさん2011/08/02(火) 13:04:35.54
>>970
VBAにRand()なんてあったか?
0979デフォルトの名無しさん2011/08/02(火) 13:28:48.97
>>978
無いと思っているのか?
0980デフォルトの名無しさん2011/08/02(火) 19:57:26.26
>>979
VBAにはRandは無いと思うぞ
Randはワークシート関数
そしてVBAにもRndはあるんだが
09819792011/08/02(火) 20:08:59.88
釣れた(ワラ
0982デフォルトの名無しさん2011/08/02(火) 20:27:15.49
恥ずかしい勘違いをしてしまったことに気付いたときに
誤魔化しとしてつぶやく言葉・・・・・それは

     釣れた(ワラ
09839792011/08/02(火) 20:32:55.48
(爆)
0984デフォルトの名無しさん2011/08/02(火) 20:39:50.45
(核爆)
09859792011/08/02(火) 20:45:58.42
藁
0986デフォルトの名無しさん2011/08/02(火) 21:20:07.88
A1:E50の中で一番下に要素がある行を返すのと一番右に要素がある列を返す方法を教えてください
0987デフォルトの名無しさん2011/08/02(火) 21:37:33.45
>>977
http://www.vbforums.com/showthread.php?t=399395
0988デフォルトの名無しさん2011/08/02(火) 21:49:59.32
>>986
1つもなかったら0を返す

Sub aaa()
  r = 50
  Do While r >= 1 And cat1(r) = 0
    r = r - 1
  Loop
  c = 5
  Do While c >= 1 And cat2(c) = 0
    c = c - 1
  Loop
  Debug.Print r, c
End Sub

Function cat1(r)
  If r >= 1 Then s = WorksheetFunction.CountA(Range(Cells(r, 1), Cells(r, 5)))
  cat1 = s
End Function

Function cat2(c)
  If c >= 1 Then s = WorksheetFunction.CountA(Range(Cells(1, c), Cells(50, c)))
  cat2 = s
End Function
09899772011/08/02(火) 21:52:00.99
>>987
I'm afraid I do not speak English, nor do I read it.
It would be really, truly, absolutely helpful, if you could provide me with some information regarding 'Form methods' in Japanese.
0990デフォルトの名無しさん2011/08/02(火) 22:10:45.94
>>987
とても役立ちました
ありがとうございます!
0991デフォルトの名無しさん2011/08/02(火) 22:11:59.47
>>986
なんとなく これに近いような印象なので紹介してみる
Excel総合相談所 97
http://hibari.2ch.net/test/read.cgi/bsoft/1304307841/708
http://hibari.2ch.net/test/read.cgi/bsoft/1304307841/710

回答
http://hibari.2ch.net/test/read.cgi/bsoft/1304307841/714
http://hibari.2ch.net/test/read.cgi/bsoft/1304307841/733-735
0992デフォルトの名無しさん2011/08/02(火) 22:35:42.98
"<"から">"まで(下のでいう<koko>,<kokomo>)を見つけ出してそれを改行コードのvbCrLfに置換したいのですがどうしたらいいでしょうか?
"abc<koko>def<kokomo>ghi"
置換後は
"abc" & vbCrLf & "def" & vbCrLf & "ghi"
このようにしたいです
<>内またその外の文字数は不明です

お願いします
0993デフォルトの名無しさん2011/08/02(火) 22:53:27.76
ユーザーフォームのラベルの文字の書式について

ワークシートに"123"とあり、2だけ赤字
これをラベルに反映されるにはどうしたらよいでしょうか?

forecolorではNullとなりエラーとなったので質問します。
0994デフォルトの名無しさん2011/08/03(水) 00:02:15.55
一つのラベルじゃ無理
桁ごとにラベル用意するかピクチャボックススに書く
0995デフォルトの名無しさん2011/08/03(水) 01:34:36.97
>>992

Sub AAA()
Dim A As String
A = "abc<koko>def<kokomo>ghi"
A = Replace(Replace(A, "<koko>", vbCrLf), "<kokomo>", vbCrLf)
MsgBox A
End Sub
0996デフォルトの名無しさん2011/08/03(水) 02:00:41.18
For i = 1 To r
For le = c To 5
For te = 5 To le - 1
If Cells(i, le).Value = Cells(i, te).Value _
Then Cells(i, le).Clear
Next te
Next le
Next i

rは要素がある最大行,cは要素がある最大列
これで重複を消そうとしたのですがうまくいきません
どうしたらいいでしょうか
0997デフォルトの名無しさん2011/08/03(水) 02:07:48.95
すみませんstep -1を付けたらうまくいきました
forを逆からやるときってstepでマイナスつけないといけないんですね・・・
0998デフォルトの名無しさん2011/08/03(水) 20:14:45.49
age
0999デフォルトの名無しさん2011/08/03(水) 21:05:41.49
______  ___________
         V
    _____
   /::::::::::::::::::::::::::\                  _
  /::::::::::::::::::::::::::::::::::::::\             /  ̄   ̄ \
  |:::::::::::::::::|_|_|_|_|           /、          ヽ はぁ?黙ってろデブw
  |;;;;;;;;;;ノ   \,, ,,/ ヽ          |・ |―-、       |
  |::( 6  ー─◎─◎ )          q -´ 二 ヽ      |
  |ノ  (∵∴ ( o o)∴)          ノ_ ー  |     |
/|   <  ∵   3 ∵>          \. ̄`  |      /
::::::\  ヽ        ノ\           O===== |
:::::::::::::\_____ノ:::::::::::\        /          |
1000デフォルトの名無しさん2011/08/03(水) 21:06:45.39
うんこチンチン
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。