X



Excel総合相談所 129
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@そうだ選挙にいこう
垢版 |
2017/10/02(月) 18:58:15.04
▼━質問テンプレ (出来れば使ってね) ━━━
【1 OSの種類         .】 Windows**
【2 Excelのバージョン   】 Excel**
【3 VBAが使えるか    .】 はい・いいえ
【4 VBAでの回答の可否】 可・否

▼━関連スレ━━━━━━━━━━━━

前スレ
Excel総合相談所 126(実質127)
https://find.2ch.net/search?q=excel

Excel VBA 質問スレ
https://find.2ch.net/search?q=excel+vba

【質問不可】Excel総合相談所スレの雑談・議論スレ
https://find.2ch.net/search?q=excel+%E3%80%80%E7%9B%B8%E8%AB%87%E6%89%80
0002名無しさん@そうだ選挙にいこう
垢版 |
2017/10/02(月) 18:58:49.11
▼━質問時の注意・決まり事━━━━━━━━━━━━━━━━━━━━
・1 現行スレ内で既出の質問が無いか、ページ内検索をしよう。(Ctrl+F)
・2 図やコードを書く場合、TABや連続する半角スペースは無視されるので注意。
・3 VBAコードを貼る場合は、部分的に伏せたり省略したりせずに全て貼りましょう。何レス使っても構いません。
・4 2回目以降の質問では名前欄に初回質問の番号を入れよう。
・5 回答内容でわからない部分があっても、すぐに聞き返さずにヘルプやGoogleなどで検索しましょう。
・6 バグ・動作上の不都合・仕様に関する質問などはマイクロソフトのサポートを受けましょう。
・7 VBAはプログラム言語のVisualBasic(6以前)に近い処理が可能で Excelに関係ないことも出来ます。
  Excelの操作に関係ない部分は、スレ違いなのでこのスレでは回答が得られにくいです。
  ここで聞くよりもVBスレやAPIスレなどの該当スレで質問しましょう。
  但し向こうはプログラマのスレなので、構文規則などの最低限の事は覚えてから質問しましょう。
  ここみたいに丸投げはダメですよ。
・8 うまくいかなかったにしても自分でやってみたこと(組んだ数式やコード)は書きましょう。
  例えエラーになる式やコードでも、何をやりたいのかを的確に把握する手がかりになります。
  その上で、どううまくいかないのかを具体的に書きましょう。
  エラーが出るなら、何処でどういうエラーが出るのか、
  想定外の結果が出るなら、条件と想定上の結果、実際の結果などを詳しく書いてください。
・9 マルチは嫌う人が多いのでなるべく避けましょう。マルチをすると、逆に回答は得られにくくなると思ってください。
・A テキストボックス(エディトボックス)、コンボボックス(ドロップダウンリスト)、リストボックス、コマンドボタン、
  チェックボックス、オプションボタン(ラジオボタン)、スピンボタン、スクロールバー、等の質問をするときは、
  ユーザーフォーム、コントロールオブジェクト、フォームオブジェクトのどれなのかを必ず書くこと。
0005名無しさん@そうだ選挙にいこう
垢版 |
2017/10/03(火) 17:02:52.68
【1 OSの種類         .】 Windows10
【2 Excelのバージョン   】 Excel2013
【3 VBAが使えるか    .】 いいえ
【4 VBAでの回答の可否】 可
  
          
10/02 16:30 200 150
10/02 16;20 340 230
10/02 16:10 300 120
10/02 16:00 100 50
10/02 15:50 400 190

A列は日付、B列は時間、
C列は高い数値、D列は低い数値が降順に取得しています。

データは2行目から降順に10分締めの時間で所得しています。
一週間分あります。

10/02の16:30から16:00の高い数値の中で最も高い数値をC3
10/02の16:30から16:00の低い数値の中で最も低い数値をD3に
出したいです。

出来たら日付、指定した時間を入力したらその期間の高い数値、
低い数値が出るようにしたいです。

お願いします。
0006986
垢版 |
2017/10/03(火) 18:33:39.95
>>5
MAXIFS関数とMINIFS関数で簡単にできるよ。
サンプル作ったけどクラッシュしてデータ消えたし休憩時間終わった。調べてみ?
0008名無しさん@そうだ選挙にいこう
垢版 |
2017/10/04(水) 01:05:30.28
式を取得する自作関数(紹介されてたやつ)が2007でエラーになるんですが
回避方法ありますか?

function test(f as range)
 test = f.value
end function

とかいうのは動きましたが、
test = f.formula
だとエラーになります。
0009名無しさん@そうだ選挙にいこう
垢版 |
2017/10/04(水) 04:08:48.43
>>5
>10/02 16:30 200 150
>10/02 16;20 340 230
>10/02 16:10 300 120
>10/02 16:00 100 50
>10/02 15:50 400 190

>データは2行目から降順に10分締めの時間で所得しています。
>高い数値の中で最も高い数値をC3
>低い数値の中で最も低い数値をD3に出したいです。

ん?
2行目からデータが入ってるなら、
C3には340、D3には230が入ってるんじゃないの?
C1とD1や、他の列に計算式入れていいの?

あとデータは3行目からに出来たりしない?
(これは別に出来なくてもいいけど、もしコピペ貼り付けしたデータなら・・・程度)
0010986
垢版 |
2017/10/04(水) 05:38:31.50
>>8
渡したセルの数式や、エラーの内容を書くべきじゃないかな
0011986
垢版 |
2017/10/04(水) 05:52:06.42
>>7
これは失礼した。2013からだと思ってたわ。

>>5
指定した日づけ、時間ってのが指定した日時って意味なら日付と時間をまず足して作業列e列へ。

数式は3種類くらいあるけど、例えば配列数式を使う方式
{=max(if((e列が開始日時以上か)✱(e列が終了日時以下か),C列))}
0012名無しさん@そうだ選挙にいこう
垢版 |
2017/10/04(水) 12:07:08.79
【1 OSの種類         .】 Windows10
【2 Excelのバージョン   】 Excel2016
【3 VBAが使えるか    .】 はい
【4 VBAでの回答の可否】 可

A列に6桁の予算コード
BCD列に予算コードに伴う予算区分(前から2桁ずつがB,C,Dに割り当て)

同じようにF列に10桁の部署コード
GHI列に部署コードの区分(3桁,4桁,3桁が割り当て)

これを各該当コード部分と区分をアンダーバーで
つなげた値を表示したいと思ってます。
素人知識で作ったのは以下の感じ。


Dim yosan As String
Dim busho As String
Dim i As Long
Dim n As Long
n = Cells(Rows.Count, "A").End(xlUp).Row

For i = 3 To n
Cells(i, "A") = Format(Cells(i, "A"), "'000000")
yosan = Cells(i, "A")
Cells(i, "B").Value = Left(yosan, 2) & "_" & Cells(i, "B").Value
Cells(i, "C").Value = Mid(yosan, 3, 2) & "_" & Cells(i, "C").Value
Cells(i, "D").Value = Right(yosan, 2) & "_" & Cells(i, "D").Value
0013名無しさん@そうだ選挙にいこう
垢版 |
2017/10/04(水) 12:07:37.19
>>12の続き

Cells(i, "F") = Format(Cells(i, "F"), "'0000000000")
busho = Cells(i, "F")
Cells(i, "G").Value = Left(busho, 3) & "_" & Cells(i, "M").Value
Cells(i, "H").Value = Mid(busho, 4, 4) & "_" & Cells(i, "N").Value
Cells(i, "I").Value = Right(busho, 3) & "_" & Cells(i, "O").Value
If Cells(i, "O").Value = "000_" Then
'※最後3桁の区分がないときは空白処理
Cells(i, "O").Value = ""
End If
Next

約55,000行くらいあるデータで30秒ほどかかるんですが、
もうちょっと早くする方法はないでしょうか。
0015名無しさん@そうだ選挙にいこう
垢版 |
2017/10/04(水) 12:29:59.60
>>12
ワークシートを一括で配列に読み込んで、配列の中だけで文字列の処理して、最後にワークシートに一括コピーすれば2秒で終わるよ
0017986
垢版 |
2017/10/04(水) 13:16:41.77
>>16
14が言いたいのはつまり
Sub aaaa()

    '読み 必要なサイズのRangeをまるごとメモリに読み込み
    Dim Data As Variant
    Data = Range("A3:O1000").Value
    
    '処理 (Cells(行,列).valueに相当。但し列はABCではなく123で指定)
    Data(1, 1) = Data(1, 1) & "_" & Data(1, 2)
    
    '書き Data配列の大きさに合わせて値を出力
    'データのサイズ変更が無いと分かっている時はRange("A3:O1000").value=Dataとかでもいいが、こう書けば間違いない。
    Range("A3").Resize(UBound(Data, 1), UBound(Data, 2)).Value = Data

    '※数式があると消えるので、値しか無いようにすること
    
End Sub

あと今のコードのままでも前後にApplication.ScreenUpdating = False〜Application.ScreenUpdating = Trueしたらかなり改善するはず
0018名無しさん@そうだ選挙にいこう
垢版 |
2017/10/04(水) 14:36:45.12
>>10
セルの数式は単に参照してるだけです。
=test(i3)

エラーは忘れました。手元になくて。
0019986
垢版 |
2017/10/04(水) 16:03:02.93
>>18
数式のエラーなの?実行時エラーなの?
i3ってセルアドレスかな?I3のセルがどういう状態なのか。数式は何が入っているのか
シンプルなプログラムなので、使い方が間違っているとしかおもえない
0020名無しさん@そうだ選挙にいこう
垢版 |
2017/10/04(水) 18:33:24.66
使ってるExcelが最近やたらと考え中が続いてフリーズとかするのですが、
新しいファイルにそのままコピペすれば今まで通り使えるようになりますか?
0021986
垢版 |
2017/10/04(水) 19:04:56.11
>>20
エクセルが?ブックがの言い間違いかな。
改善する可能性はあるけど、原因を見つけたほうがいいと思う。
順番にデータや式を消していって大きく改善する場所を見つけよう
あと、外部ファイルリンクが無いかの確認と、高さゼロのシェイプが長年のコピペで増殖して、とてつもない量のラインが隠れてる事もある。適当なシェイプを描いて選択してCtrl+AしてDeleteだ。重症な場合は、「高さゼロのシェイプを消すマクロ」でググると出てくる
0022名無しさん@そうだ選挙にいこう
垢版 |
2017/10/04(水) 21:03:34.08
>>21
外部リンクでありがちなのは、名前の定義と条件付き書式だよな
他人が使っていたファイルを引き継いで使うと割りと無駄かつ外部リンクもとのファイルがない
名前や条件付き書式が大量にあることがある

明らかに生きてない外部リンクのある名前や条件付き書式削除するだけで
動作が大分軽くなるケースが多々あるので動作が重いときは、まずチェックだ
0023名無しさん@そうだ選挙にいこう
垢版 |
2017/10/04(水) 22:03:38.30
エクセルファイルを整理した。何年も同じファイルを使っているとワークシートも増えてきて、同じワークシートでも行が増えてくるとどこに何があるかわかりにくくなる。
そこで、とりあえずファイルのコピーを作り、あまり使わないワークシートは削除した。そのあいたところに同じワークシート内の別の項目をコピーした。
これまでは検索で別の項目へ移動していたが、これで検索しなくてもワークシートの切り替えで別の項目へ移動できるようになり、かなり便利になった。
0025名無しさん@そうだ選挙にいこう
垢版 |
2017/10/04(水) 22:52:36.61
てか糞みたいな他人の作ったワークシート使うの死ぬほど苦痛だわ
表の並びが整理されてないのを無理やり見やすくしようとあがいてべたべた色塗ってんじゃねえよ
まず四角くなってない表を整理してから配布してこい糞が
0027名無しさん@そうだ選挙にいこう
垢版 |
2017/10/05(木) 12:15:50.63
VBAで一個基本的なところを教えて欲しい
マクロ1でa1〜a5を配列aとして格納する
別のモジュールマクロ2をCALLで呼び出す
マクロ2で配列aを使いたい
マクロ2で別途配列aを定義して格納しなければならないもの?


それと、マクロ2で新たに作成した配列bをマクロ1で使いたい場合、どうやるのが普通?
0029名無しさん@そうだ選挙にいこう
垢版 |
2017/10/05(木) 14:32:03.25
>>28宣言という言葉の意味がよくわかってないけど、
dim a(1 to 100) as variant
って定義している
やっぱりマクロが終了したら別マクロで共有することはできない??
一旦セルに書き込んで、別のマクロに戻った際は、そのセルから値を拾うって考え方か
003112
垢版 |
2017/10/05(木) 18:19:21.65
>>17のアドバイスをもとに以下の感じで作ってみました。
結果は5,6秒で完了するように!
だいぶ早くなったので助かりました。
ただUBoundがいまいちよくわかってません。
ワークシートの表では1列の情報が1次元、1行の情報が2次元の配列ということ?

Dim i As Long
Dim Data As Variant
Data = Range(Cells(3, 1), Cells(Rows.Count, 8).End(xlUp)).Value

For i = 1 To UBound(Data, 1)

Data(i, 1) = Format(Data(i, 1), "000000")
Data(i, 2) = Left(Data(i, 1), 2) & "_" & Data(i, 2)
Data(i, 3) = Mid(Data(i, 1), 3, 2) & "_" & Data(i, 3)
Data(i, 4) = Right(Data(i, 1), 2) & "_" & Data(i, 4)

Data(i, 5) = Format(Data(i, 5), "0000000000")
Data(i, 6) = Left(Data(i, 5), 3) & "_" & Data(i, 6)
Data(i, 7) = Mid(Data(i, 5), 4, 4) & "_" & Data(i, 7)
Data(i, 8) = Right(Data(i, 5), 3) & "_" & Data(i, 8)
If Data(i, 8) = "000_" Then '※8列目の区分がないときは空白処理
Data(i, 8) = ""
End If

Next

Range("A3").Resize(UBound(Data, 1), UBound(Data, 2)).Value = Data
0032986
垢版 |
2017/10/05(木) 18:27:19.78
>>31
uboundは配列の要素の最大値を返す関数。
,1なら一次元目(cells.valueで取り込んだ場合は行数に相当)
,2なら二次元目(列数に相当)
つまりCellsと同じ!
ウォッチウィンドウの使い方を覚えると良いよ。デバッグしながら変数の中身が見れるので色々理解できると思う
0033名無しさん@そうだ選挙にいこう
垢版 |
2017/10/05(木) 18:55:49.87
>>31
たった55000件で5秒はかかりすぎだなあ
配列をVariantからString型に変更して、ワークシートから読み込む部分をValueからTextに変えて
最後にワークシートに書き戻す時Screenupdating = False以下略で画面更新と再計算を切ってみ
0035名無しさん@そうだ選挙にいこう
垢版 |
2017/10/05(木) 22:07:45.56
いろいろ便利な機能があるが、なぜかセルをクリックすると指定したセルへ飛ぶ機能がない。何万行もあるわけだから、これがないとかなり不便。
ここで重要なのは絶対アドレスではなく、相対アドレスへ飛ぶようにすること。なぜかというと何度も行挿入や桁挿入を繰り返していると絶対アドレスへ飛んでも意味がない。
ジャンプ機能も絶対アドレスのようだし、しかもワンクリックではない。検索なら名前を工夫すれば的確に飛べるが、これもワンクリックではない。
0039名無しさん@そうだ選挙にいこう
垢版 |
2017/10/05(木) 22:51:41.69
光ケーブルがあればどこへでもいける

指定したセル てのに名前を付けとけば>>36 の言うハイパーリンクで飛べる
セルのみならず、オブジェクトに名前付けても飛ぶ なんならシート越えて飛ぶ
それを応用して最左端シートにメニューを羅列し、メニューに添った内容の
各シートを行き来するようなシロモノはごまんと見てきた 概ね好評
0041986
垢版 |
2017/10/05(木) 23:38:47.05
>>35
onkeyでカレントセルから移動するだけのショートカットキー登録すればいいじゃん
0042名無しさん@そうだ選挙にいこう
垢版 |
2017/10/05(木) 23:49:36.53
>>19
どうも
「=」を取り除くために mid を使ってて
長さを省略したのがエラーの原因だったようです。
いろいろなエラーでなかなか動かなかったんで相談してみましたが
不正確な投稿でおさわがせしました。
0043名無しさん@そうだ選挙にいこう
垢版 |
2017/10/06(金) 02:10:35.55
>>31
マクロの最初に

Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

マクロの終わりに

Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

を入れてみ
多少だけど速くなるかも
0044名無しさん@そうだ選挙にいこう
垢版 |
2017/10/06(金) 06:42:47.10
【1 OSの種類         .】 Windows10
【2 Excelのバージョン   】 Excel2013
【3 VBAが使えるか    .】 いいえ
【4 VBAでの回答の可否】 可

24時間体制で5分おきにデータを降順に取得しています。
a列に5分おきの時間、b列にその時のデータが表示しています。
見ずらいので15,30,45,00分ごとの時間が来たら
取得したデータのセル(b列)に色を付けたいのですが、可能ですか?
0045名無しさん@そうだ選挙にいこう
垢版 |
2017/10/06(金) 07:30:50.71
7:00 200 7:00 200
6:59 132 6:55 132
6:58 132 6:50 233
6:57 132 6:45 199
6:56 132 6:40 102
6:55 132 6:35 281
6:54 233
6:53 233
6:52 233
6:51 233
6:50 233
6:49 199
6:48 199

もう一つ、
a列に1分毎の時間、c列に5分毎の時間、
d列に5分毎に取得したデータが入っています。
b列にa列の時間がc列の5分以内と一致したらd列から抽出できるように
したいです。
0046986
垢版 |
2017/10/06(金) 12:24:35.64
>>44
条件付き書式で出来るかな
その中の数式でminute関数で分取り出して、mod関数で5で割り切れるときに書式設定するように設定すれば良い
0047986
垢版 |
2017/10/06(金) 12:30:12.14
>>45
vlookup関数、またはindex関数とmatch関数でできる。
004812
垢版 |
2017/10/06(金) 12:47:41.75
>>43
そのおまじないはもう既にいれてるんすよね

あと>>33variantをstringにというのは型指定変えるだけじゃだめなんですかね?
0049986
垢版 |
2017/10/06(金) 13:02:30.34
>>31
最初のレンジ指定が重いはず
いっその事全部メモリに読み込めば?
0051名無しさん@そうだ選挙にいこう
垢版 |
2017/10/06(金) 17:02:23.12
>>47
返答ありがとうございました。
VLOOKUPで試していますが
時間の例えば15分から29分抽出方法が分からないです。
できればよろしくお願いします。
0052名無しさん@そうだ選挙にいこう
垢版 |
2017/10/06(金) 17:15:58.93
Windows10+Excel2016+マクロありブックで次のようなトラブルを体験しました。
同じような体験した方いらっしゃいますか?

Windows7+Excel2010で開発したブック。一人1シート(20前後+αのシート)で普段は各人の
シートを非表示、マクロによってシートを表示する際に人によっては不要な行を非表示とする処理を
入れていた。Windows7+Excel2010(2013)までは異常なく実行できていた。

ところが、Windows10+Excel2016の環境で利用しはじめたところ、行の非表示処理でエラーとなった。
マクロではなく、手作業で非表示の操作を行おうとすると
「オブジェクトがシートからはみだします。その操作はできません。」と表示された。
オブジェクトがシートの最下行にあると行の非表示ができないらしいが、当該シートには図形は入れてない。
オブジェクトの名前を表示する簡単なマクロで調べたところ、コメントと判明。
コメントの編集をしようとしたところ、コメントの枠がシートの最下行まで移動していたことが判明。
各人のシートからすべてのコメントを削除してようやくマクロが支障なく動くようになったというもの。

Excel2010だと、コメントの書式設定画面では枠のサイズは変更できるけど、位置を指定する項目はない。
どうやったらいいんだろう?
0054名無しさん@そうだ選挙にいこう
垢版 |
2017/10/06(金) 19:01:02.26
ある値xを、複数のマクロで利用するんだけど
各マクロで毎回計算させるのと、ある値xを計算するだけのマクロを作って、それをCALLするのと、どちらがおすすめ?
005552
垢版 |
2017/10/06(金) 19:19:28.68
>>53
早々のアドバイスありがとうございます。常時表示のときのもののようなので、
これを実行した後にコメントを非表示にするという処理が有効かどうか、試してみたいと思います。
0058名無しさん@そうだ選挙にいこう
垢版 |
2017/10/06(金) 19:48:14.94
>>45
0059名無しさん@そうだ選挙にいこう
垢版 |
2017/10/06(金) 19:52:58.17
>>45
5分以内に合致する場合はっていうけど
合致するものが二つある場合はどっちを採用するの?
6:59だとすると、7;00と6:55が該当ぽいんだが
0060名無しさん@そうだ選挙にいこう
垢版 |
2017/10/06(金) 20:00:25.60
>>59
ご返信ありがとうございます。
6:59だと6:55に属します。
7:00になると7:00から7:04まで7:00の数値に属します。
わかりにくい文章ですみませんでした。
0063名無しさん@そうだ選挙にいこう
垢版 |
2017/10/07(土) 06:51:51.23
>>62
functionを分けるってのはどういう意味?
例えば、
1)直角三角形の直交二辺の値をシートから読み取るマクロ
2)斜辺の長さを求めるマクロ
3)三角形の面積を求めるマクロ
4)三角形の周長を求めるマクロ
ってあるときに、
2)と3)と4)は1)の値を必要とするから、1)の値をグローバル変数にすると、一度格納すれば、手間が減って良いですね、というような使い方だと理解している。


ただ、
4)には2)の結果も利用することができて、だから2)の値もグローバル変数にするのか
そんな感じでポンポングローバル変数を作る考え方で合ってるのか?って気はしている
1)〜4)を1つのマクロで書いちゃったって良いもんね。
ただ長くなるけど。

要するに各プログラムは短く、プログラムの数は細切れにして増やすような運用の仕方が普通の考え方で良いのか?ということがわからない
確かに、クソ長いプログラムを読むのは嫌になるし、細切れにされたプログラムならまだ読む気になるのかもしれない。
あとエラーチェックがしやすいかもしれない。
わからないけど。
0065名無しさん@そうだ選挙にいこう
垢版 |
2017/10/07(土) 08:44:48.14
>>63
横からだけど下記を新しい標準モジュールにコピペし実行してみると判ると思う

Dim 半径 As Single

Private Sub 円周()
半径 = 5
MsgBox "円周は" & 半径 * 2 * 3.14
End Sub

Private Sub 円の面積()
MsgBox "面積は" & 半径 * 半径 * 3.14
End Sub

Sub 結果()
円周
円の面積
End Sub
0066名無しさん@そうだ選挙にいこう
垢版 |
2017/10/07(土) 22:29:43.42
最近急に出た現象なんだけど
win10でExcel2016で、パスワード付きファイルを開くとウィンドウズが二つ開くようになった。

例えば前までは、ブックが一つ開いてパスワードを入力する小窓があって、パスを入力するとブックは一つしか開いてなかった。

今は、パスワード付きのファイルと、なぜかまっさらなファイルがもう一つ開く・・・
本ファイルを閉じても、そのまっさらなファイルは閉じないからメンドクサイ。
同じ症状の人いますか?解決方法あるのかな
0067名無し
垢版 |
2017/10/08(日) 01:20:07.68
>>66
沢山たまに見かけるような
再インストールしたらなおるかも?
0068名無しさん@そうだ選挙にいこう
垢版 |
2017/10/08(日) 01:58:54.66
パブリック変数なんか滅多に使わないだろ
どうしてもパブリック変数が必要なシステム組むようならそれなりに腕があるわな
初心者レベルならプライベート変数だけにしとけ

>>54
Public Const WEEK_DAYCOUNT as Long=7

Public Sub PrintWeekCount

End Sub
0069名無しさん@そうだ選挙にいこう
垢版 |
2017/10/08(日) 02:13:59.53
>>54
ある値xを何度も計算する必要があるなら、計算専用のFunctionプロシージャを用意するのが正解
何万回もループして計算するようなのでない限り、今のPCの性能なら毎回計算させても何の問題もないし、
計算パターン変更する時は専用プロシージャを書き換えるだけで済む

それから、よく使うのはパブリック定数、ただし使い方によっては Private Const... とモジュールレベル定数
パブリック変数なんかまず滅多なことじゃ使わん、てか初心者ほど絶対使うな
モジュールレベル変数に手を出すのはユーザーフォームに戻り値持たせたり、クラス自作したり、そこまで行ってから

Public Const WEEK_DAYCOUNT as Long=7

Public Sub PrintWeekAndDay

(日数dと週wを入力)

Debug.Print WeekCount(d)
Debug.Print DayCount(w)

End Sub

Private Function WeekCount(d as long) As Long
' 日数dを週に換算
WeekCount=Int(d/WEEK_DAYCOUNT)
End Function

Private Function DayCount(w as long) As Long
' 週wを日に換算
DayCount=w*WEEK_DAYCOUNT
End Function
0070名無しさん@そうだ選挙にいこう
垢版 |
2017/10/08(日) 02:20:39.75
スコープの話なのに変数の宣言抜けてたわすまん

Public Const WEEK_DAYCOUNT as Long=7

Public Sub PrintWeekAndDay

  Dim d As Long, w As Long

  (日数dと週wを入力)

  Debug.Print WeekCount(d)
  Debug.Print DayCount(w)

End Sub

Private Function WeekCount(d as long) As Long
' 日数dを週に換算
  WeekCount=Int(d/WEEK_DAYCOUNT)
End Function

Private Function DayCount(w as long) As Long
' 週wを日に換算
  DayCount=w*WEEK_DAYCOUNT
End Function
0071名無しさん@そうだ選挙にいこう
垢版 |
2017/10/08(日) 02:21:25.13
同じ変数値を別々の手続きで何度も使うなら引数を増やせ

同じ計算を何度もするのは最悪の実装
別の要因で同じ結果になるとは限らないケースでバグの元になる
0072名無しさん@そうだ選挙にいこう
垢版 |
2017/10/08(日) 07:46:03.26
>>63

>要するに各プログラムは短く、プログラムの数は細切れにして増やすような運用の仕方が普通の考え方で良いのか?
そういうこと
使い回ししやすいように作る
007363
垢版 |
2017/10/08(日) 09:45:40.90
63だけど何も取りかかれていない申し訳ない
さらっと読んだけど理解できないことが多い状況
理解できそうなところだけ消化します
007470
垢版 |
2017/10/08(日) 10:10:13.89
>>71
初心者には引数って何ぞ?ってのが最初の壁だろうな
記録マクロじゃプロシージャの引数は絶対に出てこないから
0075名無しさん@そうだ選挙にいこう
垢版 |
2017/10/08(日) 11:24:35.84
でも引数増やし過ぎたらそれはそれでわけわからんようになるからな
classがもっと手軽に使えればいいんだけど
っておもったけどvbaでそこまでするか?
0076名無しさん@そうだ選挙にいこう
垢版 |
2017/10/08(日) 11:30:23.30
>>63
それぐらいならグローバル変数は使わないほうが良い

Sub foo()
'読み込む
縦 = Cells(1, 1)
横 = Cells(1, 2)
'各数値計算
Debug.Print 斜め(縦, 横)
Debug.Print 面積(縦, 横)
Debug.Print 周長(縦, 横)

End Sub
Function 斜め(縦, 横)
斜め = Sqr(縦 ^ 2 + 横 ^ 2)
End Function
Function 面積(縦, 横)
面積 = 縦 * 横 / 2
End Function
Function 周長(縦, 横)
周長 = 縦 + 横 + 斜め(縦, 横)
End Function
0077名無しさん@そうだ選挙にいこう
垢版 |
2017/10/08(日) 13:08:04.28
>>75
もちろん構造体やプロパティを使う方がいいけど、
引数が多すぎるのはとくに初心者はモジュール化の方針に問題があることのが多い
正解がないに等しいから経験を積むしかないし
0078名無しさん@そうだ選挙にいこう
垢版 |
2017/10/08(日) 13:21:11.27
classにすればいいんだけど、そうすると更に難易度上がるからな
引数いっぱいでいいと思う
どうせ対して保守やらなんやらしないだろ。
vbaのいいとこだけつまみぐいしてればいい
0081名無しさん@そうだ選挙にいこう
垢版 |
2017/10/08(日) 14:47:43.17
>>67
よくある事例なんですね。
やっぱり再インストールしかないんですかね・・・
1年前にオプションで設定とか色々いじってて、どこを設定しとか忘れてるので出来れば再インストールしたくないんですよねえ・・・
0083名無しさん@そうだ選挙にいこう
垢版 |
2017/10/08(日) 15:33:04.23
>>81
逆に考える
なるべく設定は触らずに使うようにするんだよ
俺もやってきたしお前のおかんも経験済みだ

PC設定はgoogleIMEとchrome、拡張子の表示ぐらい
エクセルに至っては数式バー少し伸ばすぐらい
0084名無し
垢版 |
2017/10/08(日) 17:34:14.90
>>81
オプションスクショ取っておくだけで、設定の復元なんて数分でできるじゃん
リボンはエクスポートできるし。
0085名無し
垢版 |
2017/10/08(日) 17:36:48.15
>>80
どっかのブログでなぜかとても不安定なcomを使う方法ばかり流通してるせいで嫌う人多いけど、ちゃんと安定したエクセルの読み方あるって書いてあったよ
実際使ってるけど全く問題ない
0087名無しさん@そうだ選挙にいこう
垢版 |
2017/10/08(日) 19:54:11.58
再インストールしましたが、>>66の症状は治りませんでした・・・
適当に他のExcelファイルを開いてて、パスワード付きファイルを開くと二重に開かないんですけど
単独で開こうとすると二重で開く・・・
なんでだあ
0090名無し
垢版 |
2017/10/09(月) 01:18:55.02
>>87
関連付け関係だと思うんだけどねー
Office系は設定が複雑化しててマニュアル修正しずらいから嫌い。
コンパネの既定のプログラムで治る可能性もあるけど多分無理。悪化する可能性もある。
一番安全なのはOSごと‥
0093名無しさん@そうだ選挙にいこう
垢版 |
2017/10/11(水) 10:05:35.88
【1 OSの種類         .】 Windows10
【2 Excelのバージョン   】 Excel2007
【3 VBAが使えるか    .】 いいえ
【4 VBAでの回答の可否】 否

現在、条件付き書式で、期日が2週間以内になったら
セルの色が変わるようにしています。

=TODAY()+14>A1

しかし、上記の書式では期日が過ぎてもセルの色が変わったままです。
期日が過ぎたらセルの色が変わらないようにするには、どのように
書けばいいのでしょうか。宜しくお願いします。
0095名無しさん@そうだ選挙にいこう
垢版 |
2017/10/11(水) 13:13:19.17
【1 OSの種類         .】 Windows7
【2 Excelのバージョン   】 Excel2010
【3 VBAが使えるか    .】 いいえ
【4 VBAでの回答の可否】 否
名前に付いてなんですが、
例えばA4:Z99を4000回INDEX〜MATCH等で参照するとして
MATCHに全部A4:Z99と書くのと、A4:Z99に2〜3文字程度の名前をつけて
名前で参照するのでは、どちらが軽快でしょうか?

MATCH(150,A4:Z99,1)
MATCH(150,原価A,1)  [A4:Z99に"原価A"という名前を定義]
こんなかんじですが、上と下、どちらが軽快ですか?
0098名無しさん@そうだ選挙にいこう
垢版 |
2017/10/11(水) 20:55:48.65
表計算使い始めて分からないことがあるので質問させてください。

A1 B1 C1のセルがあって、
B1の背景に色がついたら、B1の数値をA1に表示。
C1の背景に色がついたら、C1の数値をA1に表示。
どちらも色がついた場合は特に何も無し。

とするには、どのような式を入力すればいいでしょうか?
お願いします。
0099名無しさん@そうだ選挙にいこう
垢版 |
2017/10/11(水) 21:05:27.33
>>98
色がついたら、ということは基本的にできない
b2に1を入力することで分岐させる
A1=if(B2=1,b1,"")
B1の条件付き書式はB2が1なら〜で設定する
0100sage
垢版 |
2017/10/11(水) 22:54:37.09
すいません、質問させてくだい。

エクセルのファイルを画面上に2つ以上見えているとします。

そこで、ショートカットキーを使ってファイル間をアクティブセルを移動させることは出来ませんか?

Ctrl +TABではセルは移動しますが、ほかのエクセルファイルは最小化されてしまいます。画面上のエクセルファイルは見えたままにしておきたいです。

わかる方お願いいたします。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況