1 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 19:07:54 ] ExcelのVBAに関する質問スレです 前スレ pc12.2ch.net/test/read.cgi/tech/1241885130/ ★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)
111 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 16:21:06 ] >>108 &
112 名前:デフォルトの名無しさん [2009/07/21(火) 17:13:53 ] すみません質問です。 C列に"abc"という文字列があった場合、その行全体を削除し 上に詰めるというマクロを組みたいのですが どなたか教えていただけますでしょうか。 尚、オートフィルタを使わないやり方でお願い致します。
113 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 17:23:40 ] 上? 左じゃなくて?
114 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 17:28:01 ] >>112 1.C列に文字列abcがあるなら行削除 2.配列に
115 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 17:30:25 ] とりあえず4000行見るマクロ Sub aaa() For a = 1 To 4000 If Cells(a, 3) = "abc" Then Rows(a).Delete shift:=xlUp Next End Sub
116 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 17:39:44 ] >>112 Sub a() For r = ActiveCell.SpecialCells(xlLastCell).Row To 1 Step -1 If Cells(r, 3) = "abc" Then Rows(r).Delete Next End Sub >>115 上からだとabcが連続していた時に消えない
117 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 17:41:30 ] >>115 これだと2行つづいて"abc"があった場合抜けてしまわない? オートフィルタを使った方法を教えて欲しい
118 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 17:47:51 ] オートフィルタはabcが隠れるだけで本当に消えるわけじゃないからなあ
119 名前:デフォルトの名無しさん [2009/07/21(火) 18:11:41 ] >>108 そんなの余裕だろうが。 SolverAdd CellRef:="$F$1", Relation:=1, FormulaText:="G(1+i)" で一発だ。
120 名前:108 [2009/07/21(火) 19:24:43 ] >>109 ,>>111 ヒントをどうもありがとうございます。 ただ、&の意味がわからないのですが、どういうことでしょうか? $だと固定だから&にしろということでしょうか・・・? 無知ですいません。
121 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 19:30:31 ] >>120 "$G$" & i &は文字列の結合
122 名前:108 [2009/07/21(火) 21:36:02 ] >>121 無事プログラムがうまく動きました! どうもありがとうございます!
123 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 21:38:52 ] Dim 日数 As Integer Dim 本日 As Date 本日 = Date 日数 = DateDiff("d", "2009/7/10", "本日") とやったところ、型が一致しませんとでます。 本日までの日数を求めたいのですがどうすればいいのでしょうか?
124 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 21:44:33 ] Excel立ち上げず書いてるからおかしかったら突っ込みよろしく >>117 sub オートフィルタを使った方法() Dim 元シート as WorkSheet,作業シート as WorkSheet Set 元シート=ActiveSheet 元シート.Copy Set 作業シート=ActiveSheet 作業シート.Range("C1").AutoFilter 1,"<>""*abc*""" 作業シート.Cells.SpecialCells(xlCellTypeVisible).Copy 元シート.Cells. 作業シート.Parent.Close False End sub
125 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 21:47:28 ] >>123 "本日" w
126 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 21:47:51 ] >>123 変数の本日にはダブルクォーテーションいらんよ 「本日」という文字列は計算できんじゃろ
127 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 22:08:31 ] 125に代わっていうと 日数 = DateDiff("d", "2009/7/10", "本日") は 日数 = DateDiff("d", "2009/7/10", Now) 日数 = DateDiff("d", "2009/7/10", Date)
128 名前:124 mailto:sage [2009/07/21(火) 22:12:34 ] あっコピー先の最後の「.」はいらんわな あとクライテリアの*abc*を囲う必要があったかなかったか自信ない
129 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 22:37:38 ] >>116 けつからやんのか。頭良いな。
130 名前:123 mailto:sage [2009/07/21(火) 22:40:21 ] レスありがとうございます。 無事できました。>>127 さんのようにしました。
131 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 00:02:50 ] >>129 基本中の基本。 君の頭が○○なだけです。
132 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 00:21:45 ] こんなんピボットでやれば一発だわwwwww
133 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 01:32:28 ] >>131 おまえにいってねえからwww
134 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 18:03:46 ] また堕ちるぞ
135 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 23:04:58 ] >>133 ワロスw
136 名前:デフォルトの名無しさん [2009/07/23(木) 00:42:00 ] 現在Excelで作ったxmlを特定のURLへ送信するプログラムを作成しています。 (Microsoft XML version2.0使用) Sub xml() Dim aaa As Integer aaa = "001" Dim bbb As String bbb = "001" Dim xmlDoc As MSXML.DOMDocument Dim xmlPI As IXMLDOMProcessingInstruction Dim node(3) As IXMLDOMNode Dim attr As MSXML.IXMLDOMAttribute Set xmlDoc = New MSXML.DOMDocument Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")) Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "TEST", "")) Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "test1", "")): node(2).Text = aaa Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "test2", "")): node(2).Text = bbb '作成されたxml確認用 xmlDoc.Save ("test.txt") End Sub @set nodeに入れたaaaとbbbですが、1と表示されてしまいます。001と表示するにはどうしたら良いのでしょうか。 A作成された値(xml)を特定のURLへ送信したいのですが、どのライブラリ?等を利用すれば宜しいでしょうか (値を送ると、<result>NG</result>といった値が返却される予定です) すみませんがお力添え頂けると幸いです。
137 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 02:07:25 ] >>136 Excel 2007 + MSXML3 (MSXML2がなかった)とVBScript 5.0 + MSXML2 (Officeがなかった)の2環境でやってみたが、 いずれもbbbのほうは001になったぞ。 それをHTTPで送りたいのなら、MSXML.XMLHTTPRequestを使えばいい。
138 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 03:52:34 ] 変数についてなんですが、 ----------------------------------- Dim 値 As Integer 値 = Range("A1") Range("A1").FomulaR1C1 = "COUNTA(R[1]C[1],R[1]C[10])" 'A行 Range("A1").Copy Range("A1").PasteSpecial (xlCellTypeValue) Range("B1").Activate Activecell,offeset(1,値).Select 'B行 --------------------------------------------------------- 上記のようなコードで実行するとA行で集計されたはずの数値がB行に来た段階で代入されていないようなのですが、 変数というのは、宣言の時点で代入される数値が決まっていないといけないのでしょうか?
139 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 06:29:56 ] Range("A1").FomulaR1C1 = "=COUNTA(R[1]C[1],R[1]C[10])" 'A行 いこーるつけなさい
140 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 07:47:58 ] >>138 エスパーするとやりたいのはこういうこと? Dim 値 As Integer 値 = WorksheetFnction.CountA(Range("B2:K2")) Range("B1").Offeset(1,値).Select 質問に直接答えれば宣言はいつしてもいいけど変数の使い方がおかしい Integer→Rangeに変えてSet 値 = Range("A1") 最後の行をActiveCell..Offeset(1,値.Value).Select
141 名前:デフォルトの名無しさん [2009/07/23(木) 18:06:57 ] >>138 Activecell,offeset(1,値).Select 'B行 ↑ 点の種類間違ってる 最後の行はたぶんoffeset→offset クライマックスの2行まとめて Cells(2,2+値).Select 'ともかけるます >>140 変数の使い方はあってない? Range("A1") を取得すると Range("A1").Value を返すしIntegerで足りるし 値.Copy とかやるでもないし
142 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 18:36:20 ] Excel2007です。 赤丸(背景色は透明)を作りたいのですが、背景色を透明にできません。 Shape.Line.BackColorの編集でできそうなのですが、検索方法が悪いのか見つかりません。(この予測は間違いですか?) Dim myShape As Shape With ThisWorkbook.Worksheets("Sheet1") Set addCell = .Cells(intRow, intCol) Set myShape = .Shapes.AddShape(msoShapeOval, addCell.Left, addCell.Top, addCell.Width, addCell.Height) myShape.Line.ForeColor.RGB = RGB(255, 0, 0) myShape.Line.Weight = 2 End With よろしくお願いいたします。
143 名前:デフォルトの名無しさん [2009/07/23(木) 18:48:15 ] >>142 myShape.Fill.Visible = msoFalse
144 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 19:52:54 ] >>143 無事、透明になりました。ありがとうございます。
145 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 22:14:47 ] >>141 あっ、そういう風に見れば 間違ってるのは変数「値」にA1の値を代入するタイミングだな
146 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 23:31:01 ] >>137 ありがとうございます!
147 名前:デフォルトの名無しさん [2009/07/25(土) 12:07:00 ] エクセル2000を使用しています。 コンボボックス2個、テキストボックス1個、コマンドボタンのユーザーフォームで シートに以下の図のようにデータがあります。 コンボボックス1にA列の値、コンボボックス2にB列の値を入れて、 コマンドボタンを実行すると、該当するC列の値をテキストボックスに表示する にはどうすればいいですか? A B C 1 ああ カカ 100 2 ああ キキ 200 3 ああ クク 300 4 いい ケケ 400 5 いい ココ 500 コンボボックス1に「ああ」、コンボボックス2に「クク」なら テキストボックスは「300」になるようにしたいです。 よろしくお願いします。
148 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:24:06 ] 曖昧だな
149 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:35:45 ] 1とA、2とBの合致をANDでもいいから組み合わせて、そのセルを変数に格納して、テキストボックス=セル(変数、3).バリューすればいいかも!
150 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:44:08 ] vbaが体系的に勉強できるサイトや本でおすすめあれば教えてください。
151 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:48:49 ] >>150 ここでROMがお奨め(;゚д゚)ァ
152 名前:デフォルトの名無しさん [2009/07/25(土) 13:27:13 ] 項目1, 項目2, 項目3, 項目4, 項目n・・・(最大:n=255) あああ, ううう, えええ, くくく, ・・・ いいい, , おおお, けけけ, ・・・ , , かかか, , ・・・ , , ききき, , ・・・ (最大:行=65535) とあった場合、 項目1, 項目2, 項目3, 項目4・・・ あああ, ううう, えええ, くくく いいい, ううう, おおお, くくく あああ, ううう, かかか, くくく いいい, ううう, ききき, くくく あああ, ううう, えええ, けけけ いいい, ううう, おおお, けけけ あああ, ううう, かかか, けけけ いいい, ううう, ききき, けけけ ・ ・ ・ のように、データを詰めて別のシートの同じ位置(例:A1)から出力したいです。 ※行・列は可変データです。
153 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:29:47 ] >>150 151もおすすめだけど「体系的」ではないわなw 確かスレ違いだったと思うから紹介はしないが適当にググればいくつか出てくるからサイトさがしはそんなに難しくない 本買うなら最初はあまり分厚いのでなくて初心者向けの簡単な入門書やってみれば 自分が身につけたいことが見えてきて次に本買うときは自分の好みに合った本選びできる
154 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:37:24 ] >150 excel vba 入門 に一致する日本語のページ 約 183,000 件中 1 - 10 件目 (0.35 秒)
155 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:39:59 ] >>152 これって 丸投げというか、依頼じゃね 何がわからないか書かないと答えられないだろ
156 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:45:47 ] >>152 nhngdおk
157 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:59:52 ] >152 この例だとfor〜nextループ4重で行数は2×1×4×2=16行。 組み合わせの問題で項目数が不定ということは再帰処理ができるとわかりやすいんだろうけど・・・・ 「excel vba 再帰」でググったら再帰プログラムができるらしい。 ひとつ間違えると無限ループになるし、項目数最大256個が大丈夫なのか、やってみないと なんともいえない。
158 名前:157 mailto:sage [2009/07/25(土) 17:28:56 ] >152 行基準(再帰処理)でやろうとしたら、こんがらがってしまい中断。列基準だとなんかできそう。 先に列数(4)と、列毎の行数を調べ、配列に設定。この際添え字は0〜列数+1とし、 配列(0)と配列(列数+1)の内容は1にしておく。 その結果、配列(0)=1、配列(1)=2、配列(2)=1、配列(3)=4、配列(4)=2、配列(5)=1 となる。 左端列(A列:列番号1)は当該列の要素("あああ"、"いいい"の2種類をそれぞれ左側の組み合 わせ数1回繰り返したものを右側の組み合わせ数(1×4×2=)8回出力する。 →あああ、いいい を8回 B列(列番号2)は当該列の要素("ううう")の1種類をそれぞれ左側の組み合わせ数2回繰り返した ものを、右側の組み合わせ数(1×4×2=)8回出力する。 →ううう、ううう を8回 C列(列番号3)は当該列の要素("えええ"、"おおお"、"かかか"、"ききき")の4種類をそれぞれ 左側の組み合わせ数2回繰り返したものを、右側の組み合わせ数2回出力する。 →(えええ を2回、おおお を2回、かかか を2回、ききき を2回)を2回 D列(列番号4)は当該列の要素("くくく"、"けけけ")の2種類をそれぞれ左側の組み合わせ数 8回繰り返したものを、右側の組み合わせ数1回出力する。 →くくく を8回、けけけ を8回 列数がNで、n列目の出力を考えた場合、 要素数は 配列(n) 左側の組み合わせ数は 配列(0)×配列(1)×・・・×配列(n−1) A列の場合も配列(0)=1があるので計算に支障なし 右側の組み合わせ数は 配列(n+1)×・・・配列(N−1)×配列(N) 最右列の場合も配列(N+1)=1があるので計算に支障なし
159 名前:157 mailto:sage [2009/07/25(土) 17:35:38 ] >158の続き >152の例だと「項目3」が えええ、おおお、かかか、ききき、えええ、・・・という 順番だけど、えええ、えええ、おおお、おおお、かかか、かかか、ききき、ききき・・・の 並びの方が組み合わせ順としては自然だと思う。項目4も同様に同じものが8回ずつ繰り返す ことになります。 >152 ここまで示したらできますか?
160 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 18:55:00 ] よくわからないけど、列ごとにソートしたいのか? 格納用の配列(65534、254)を用意 ソート用の配列(65534、0)を用意 列をカウントする変数iを用意 for i=0to254 ソート用の配列に列データを格納、ソート 格納用の配列(65534、i)にソートしたデータを格納 最後にシートに格納した配列を流し込む
161 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 20:12:03 ] >>152 死ぬほど遅いけどこういうことか? Sub test() For Each c In Range(Cells(1, 1), Cells(65535, 255)) If (c.Value = Empty And c.Rows > 1) Then c.Value = c.Offset(-1, 0).Value End If Next End Sub
162 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:10:28 ] >>152 1.まず、項目1...nの要素を数える 2.数えた要素を掛け算、K1xK2x...xKn 3.2.で得られた数値が必要な行数なので、 各項目ごとに各要素で必要行数だけ埋める
163 名前:162 mailto:sage [2009/07/25(土) 21:13:15 ] すまそ 2.数えた要素の、最小公倍数を求める
164 名前:162 mailto:sage [2009/07/25(土) 21:16:14 ] すまそ だれか、2.の正解を頼む
165 名前:162 mailto:sage [2009/07/25(土) 21:18:27 ] ああ、最初の162で正解でした
166 名前:162 mailto:sage [2009/07/25(土) 21:22:58 ] >>152 の質問で あああ, ううう, おおお, くくく の組み合わせが必要かどうかで答えが変わるね スレよごし、すまそ
167 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:54:28 ] 環境 ・WindowsVista ・Excel2002 A1〜A10の合計をC2に表示させるマクロを作りたいのですが上手くいきません。 自分で作ったのは以下の通りです。 Sub practice() Dim i As Integer For i = 1 To 10 Cells(2, 3) = Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) Next i End Sub アドバイスを頂けると助かります。 よろしくお願いします。
168 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:01:07 ] どううまく動かないか説明もせずにアドバイスとな
169 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:12:49 ] 説明不足で申し訳ありません。 上手くいかないというのは合計の値がオートSUMで計算した合計と一致しないということです。
170 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:21:21 ] やりたいことはコレか? Sub practice() Dim i As Integer Dim sum as Integer sum = 0 For i = 1 To 10 sum = sum + Cells(i, 1) Next i Cells(2, 3) = sum End Sub
171 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:26:42 ] >>167 元マクロ無視して書けばこういうこと? Sub practice() range("c2") = worksheetfunction.sum(range("a1:a10")) End Sub
172 名前:167 mailto:sage [2009/07/26(日) 01:28:41 ] >>170 値が一致しました。ありがとうございました。
173 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 03:50:40 ] どうせ小数をintegerで計算したってオチだろ
174 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 08:32:13 ] セルを各々9回余分に加算してたんだろ
175 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 09:25:18 ] 動かないとかエラーが出てるとか書く時はどう望んだ風に動かないとかどんなエラーメッセージが出てるとか書け と>>1 に書いたとしても、読みもしないんだろうなぁ。
176 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 09:33:22 ] エスパーだけどループ処理を使ってSUMさせる課題か何かだな
177 名前:デフォルトの名無しさん [2009/07/26(日) 13:48:35 ] よろしくお願いしますm(__)m Excelで店舗の営業日報を作れるデータを作成しました。 他人がそのデータを使うワケなのですが、 データに打ち込んで、上書き保存などはできるが、 データそのものを複製やコピーする事を防止する事は可能ですか? また、暗証番号機能などで、その複製のロックを管理する事は可能でしょうか? あるとすればどのような手段でデータをその人に預ければよいのでしょうか。 わかりずらいかも知れませんが よろしくお願いしますm(__)m
178 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 14:00:33 ] >>177 マルチ 芯でください
179 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 16:08:32 ] できる で、マルチならどこなのか晴れYO
180 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 16:09:31 ] 54 :名無しさん@そうだ選挙にいこう :2009/07/26(日) 13:28:31 よろしくお願いしますm(__)m Excelで店舗の営業日報を作れるデータを作成しました。 他人がそのデータを使うワケなのですが、 データに打ち込んで、上書き保存などはできるが、 データそのものを複製やコピーする事を防止する事は可能ですか? また、暗証番号機能などで、その複製のロックを管理する事は可能でしょうか? あるとすればどのような手段でデータをその人に預ければよいのでしょうか。 わかりずらいかも知れませんが よろしくお願いしますm(__)m
181 名前:デフォルトの名無しさん [2009/07/26(日) 17:25:08 ] 自分>>177 です。 マルチとは 『他でも質問してる』 って意味なのですね。 すみませんm(__)m ドコで質問すればベストか、また、 色んな人に聞けばもしかしたら、と思い書き込みしてしまいましたm(__)m ご迷惑おかけしましたm(__)m さしつかえ無ければ>>179 さん、簡単にでも教えていただけませんでしょうか? よろしくお願いしますm(__)m
182 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 17:29:37 ] ↑ 女子大生or女子高生なら、即解決w
183 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 17:53:50 ] ☆質問例☆ Excelで店舗の営業日報を作れるデータを作成しました。 他人がそのデータを使うワケなのですが、 都内の中学校にかよう15歳の女子中学中学生ですが、最近中学1年の妹の胸が大きくなってきて困ります。 まだ中学生なのに私よりも膨らみが目立っているのが少し悲しいです。 一緒にお風呂に入るとよくわかります。 妹は私の気持ちに気がつくどころか、ことあるごとにさわったりもんだりしてくるのです・・・。 データに打ち込んで、上書き保存などはできるが、 データそのものを複製やコピーする事を防止する事は可能ですか? また、暗証番号機能などで、その複製のロックを管理する事は可能でしょうか? あるとすればどのような手段でデータをその人に預ければよいのでしょうか。 今日もスポーツブラの下から手を入れてきて、声を堪えるのに大変でした。 わかりずらいかも知れませんが よろしくお願いしますm(__)m
184 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 18:13:54 ] 俺は貧乳でもOKだよ。
185 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 22:33:47 ] XP,OFFICE 2007 初心者&初カキコです。 いきなりすみません。 配列変数 A(3,100)があるとして、 A(2,0)〜A(2,100)や、A(3,0)〜A(3,100)といった各一次元配列の平均をそれぞれ出したいのですが、 全ての平均を出す場合は .Average(A) ですが、各次元毎だと、方法が解りません。 どなたか指導をお願いします。
186 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 22:48:03 ] 環境 ・WindowsVista ・Excel2007 SheetAに貼った画像の中から選択したものを一つSheetBに貼りたいんですが どうすればいいですか?
187 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 22:58:51 ] >186 マクロの自動記録は試してみましたか? 当方Excel2003ですが、自動記録してできたソースの1〜2行コメント化するだけで、できましたよ。
188 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:02:24 ] >185 凡人なので、for 〜 next ループで回しながら、合計と件数を調べてわり算で求める方法しか知りません。 これ以外の回答をお望み?
189 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:03:27 ] >>187 ありがとうございます やってみます
190 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:29:12 ] >188 出来るだけ早くしたくて。。 すみません。実は50×100×10000の三次元配列なので、それやると時間が半端ないんです。
191 名前:188 mailto:sage [2009/07/26(日) 23:34:11 ] >185,190 情報の後出しイクナイ
192 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:37:25 ] >>186 ですが、自動記録を使ってやってみました でもだめでした・・ Sheet2にある複数の図のうち、異なる図をコピーしても、すべて Sheets("Sheet2").Select Selection.Copy となってしまいます コピーする図を選択するにはどのようにすればいいんですか?
193 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:39:54 ] >>191 そんなの後出しじゃないだろ。 質問の内容から想定してしかるべき。
194 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:41:24 ] for 〜 nextで変数を複数設定したい場合はどうすればできますか? たとえば変数iが「5 to 101 step 24」で変数kが「5 to 20 step 5」として cells(i,k).copy selection.paste みたいな感じで動作させたいです。
195 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:47:02 ] >>191 「俺にはわからない。」と言えばいいんだよ。 >情報の後出しイクナイ なんだこりゃ?ぶさいく。
196 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:47:19 ] >191 確かに。後だしは良くないですよね。すみません。 出来るだけ簡単なシチュエーションにしたかったんです。 ところで、どなたか>185のやり方をご存知ないでしょうか?
197 名前:187 mailto:sage [2009/07/26(日) 23:59:08 ] >192 当方の手順(マクロの自動記録)シートAに図形があって選択していない状態から 1 図形をクリック 2 メニューの編集−コピー 3 シートBのタブをクリック 4 メニューの編集−貼り付け これだけです。できたソースは↓で、1行目だけ削除すればいい。 ActiveSheet.Shapes("Picture 1").Select ←これだけ削除 Selection.Copy Sheets("SheetB").Select ActiveSheet.Paste 実行する際は、マクロを呼び出す前にコピーしたい図形をクリックして選択 状態にしておくこと。シートBの貼り付け先を指定したいときは、自動記録 のときに当該セルをクリックする。
198 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 00:04:47 ] >192 196ですが、世の中ギブアンドテイクって事で、試して見てください。 Worksheets("A").shapes(i).Copy Worksheets("B").Activate Active.Sheet.Paste iの部分に画像が何枚目かを代入。
199 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 00:07:40 ] >>197 >>実行する際は、マクロを呼び出す前にコピーしたい図形をクリックして選択 状態にしておくこと。 この作業無しでする方法はないですか?
200 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 00:22:25 ] >>198 できました! みなさんありがとうございました
201 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 01:24:29 ] >>185 Range(Cells(1, 1), Cells(3, 100)) = a として 各行の平均を出す
202 名前:デフォルトの名無しさん [2009/07/27(月) 01:28:15 ] >>194 k = 5 For i = 5 To 101 Step 24 If k > 20 Then Exit For '↑はkのTo 20があまり重要でないならいらない Cells(i,k).Copy Selection.Paste k = k + 5 Next こんなんなったけどいいか? これだと、変数iとkがいずれかはみ出したらループを抜ける。 これだと、(i,k)=(5,5),(29,10),(53,15),(77,20)の4回ループ内を実行する。
203 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 01:42:17 ] >>202 ありがとうございます。 上記の方法で無事動作しました。 ちなみに変数にしたい要素が3つ以上ある場合というのは一般的にどういう処理が効率的でしょうか? 今はいちいちすべての場合分けをして記述していますが、それぞれの増減は規則性があるので なんとか簡易にしたいと思っています。
204 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 01:53:41 ] >>185 Sub test() Debug.Print WorksheetFunction.Average(Range("A1:A100")) Debug.Print WorksheetFunction.Average(Range("B1:B100")) Debug.Print WorksheetFunction.Average(Range("C1:C100")) End Sub
205 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 01:53:48 ] >201 ありがとうございます。 やはりシートを利用するしかないんでしょうね。 それか個別の一次元配列変数を宣言して代入とか。 出来れば、.Average(A(2))とかの記述でその従属二次元配列が計算されるのを期待したんですが、 特定の次元を宣言するような関数なり構文はないんですね。。 今日はもう寝ます。明日会社だし。 ありがとうございました。
206 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 10:20:03 ] >>203 「一般的」と「効率的」と「簡易」は両立が難しい。 何がやりたいのか自分でもわかってない気配がするが、まずは質問を絞れ。 ループ終了の条件が2つ以上ある時は無理にFor Nextを使わない。 Exit ForやGotoのような、プログラムの流れを強制的に変える命令は、 あまり使わない方がいい。 i = 5 k = 5 While (i <= 101) And (k <= 20) Cells(i, k) 以下略 i = i + 24 k = k + 5 Wend
207 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 10:44:58 ] 変数が大量にあって、ループの回数も多くなると、 ForとIfでもWhileでも、終了条件の判定回数が増えるから少し効率が落ちるね。 そういう時は最初にループの回数を調べしまうといい。 回数i = (101 - 5) / 24 回数k = (20 - 5) / 5 If 回数i < 回数k Then 回数 = 回数i Else 回数 = 回数k End If i = 5 k = 5 For a = 1 To 回数 Cells 以下省略 i = i + 24 k = k + 5 Next あとはケースバイケース。 可能なら、こんなふうに数式を短縮してみるとか。 For a = 0 To 回数 - 1 Cells(5 + 24 * a, 5 + 5 * a) 以下省略 Next
208 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 17:17:40 ] strTextLine = "A,B,C,D," というCSVファイルがあって、これをDataという配列変数に Data = Split(strTextLine, ",") とすると DATA[0]はA DATA[1]はB DATA[2]はC DATA[3]はD ですが DATA[5]にナルが入るんでしょうか? それとも最後のカンマは無視されるんでしょうか? 配列に入れて処理を加えた後に strTextLine = Data(0) For C = 1 To UBound(Data) strTextLine = strTextLine & "," & Data(C) Next C で戻してやると最後のカンマは生きているので、無視はされてないのではないかと思うのですが、確証が得たいので質問しました。
209 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 17:33:58 ] あれ使うといいよ イミディエイなんとか
210 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 18:53:26 ] >>208 さすがにDATA[5]には何も入らんだろう。という挙げ足は置いといて。 たとえば元のデータが"A,,,B"で長さが0の文字列が無視されてしまったらどうなると思う?
211 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 18:57:25 ] 何百行あるか何千行あるかわからないテキストファイルを一行ずつ配列に入れたいんですが LineInputを繰り返す度に毎回ReDimしながら代入するしかありませんか? なんとなくRedimを繰り返すのは処理速度的にあまりスマートではないのではという懸念があるのですが。 一度LineInputの度に変数に+1して行数を求めてから もう一度LineInputと代入を繰り返すのとどっちが良いでしょうか。