Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


157 / 3841 ページ ←次へ | 前へ→

【79338】ランダムな数字の入力方法
質問  アエロリット  - 17/7/31(月) 20:59 -

引用なし
パスワード
   目的:推移図に入力してある、値が異常の場合、正常値に修正。

現状、下記に記入してある項目1〜2まではしましたが、値が異常の場合、正常値に修正の仕方がわかりません。
知恵をお借りできませんでしょうか。
よろしくお願いいたします。

処理内容:
1.アクティブシートに入力してあるA3の文字を取得
2.listシートに記入してある文字列から検索して、ワークブック(推移図)を開く。
3.ワークブック(推移図)を開く。
4.セルF32〜AI32(31日まである場合はAJ32、それ以降の列は空欄)まで日付が入力されています。
5.セルF33〜AI33(31日まである場合はAJ33、それ以降の列は空欄)までデータ(数字)が入っています。
6.基準線が3つ有ります。(基準線は、1.+基準線(AY11に入力してある)、2.-基準線(AY15に入力してある)、3.センターライン(+基準線と-基準線の間、(AY13に入力してある)) 
7.+基準線を超えたら、+基準線とセンターラインの間にランダムな値に修正したい。
※可能なら、+基準線に寄ってるランダムな数字orセンターラインに寄ってるランダムな数字を選択できると有りがたい。
8.同様に-基準線を超えたら、-基準線とセンターラインの間にランダムな値に修正したい。
※可能なら、-基準線に寄ってるランダムな数字orセンターラインに寄ってるランダムな数字を選択できると有りがたい。
9.データ修正が終了したら、次のシートを同様に修正する
※データは、シートによって小数点5ケタまで使用しています。


Option Explicit
Sub error_correction()
Dim Target As String
Dim FilenameIn As Range
Dim FilenameOut As Range
Dim PathnameIn As String
Dim PathnameOut As String
Dim plus As Double
Dim minus As Long
Dim Cl As Long
Dim cal As Long


Cl = Cells(51, 13).Value


Target = Cells(3, 1).Value

Worksheets("list").Select
PathnameOut = Cells(13, 3).Value
Set FilenameIn = Range(Cells(3, 2), Cells(12, 2)).Find(Target, LookAt:=xlPart)
Set FilenameOut = FilenameIn.Offset(0, 1)
If FilenameIn.Offset(0, 2).Value <> "5F" Then
  PathnameIn = Cells(13, 2).Value
  PathnameOut = Cells(13, 3).Value
  Else
    PathnameIn = Cells(14, 2).Value
    PathnameOut = Cells(14, 3).Value
End If
Workbooks.Open Filename:=PathnameOut & "\" & FilenameOut & ".xls"
plus = Cells(33, 14)

'下記以降の処理がわかりません。
Do
If plus >= Cells(11, 51).Value Then
  Cells(33, 14).Value = plus - (Cells(11, 51) - Cells(13, 51))
  If Cells(33, 14) >= Cells(11, 51) Then
   Cells
  End If
  
End If
Loop

Set FilenameIn = Nothing
Set FilenameOut = Nothing

End Sub
・ツリー全体表示

【79337】Re:フォルダ名一覧を古い順に取得
発言  γ  - 17/7/28(金) 23:41 -

引用なし
パスワード
   FileSystemObjectを使って下さい。
ht tp://officetanaka.net/excel/vba/filesystemobject/folder.htm

日付といっても何の日付ですか?3種類あります。

決められた順に取り出すのは難しいので、
日付と名前をワークシートにいったん取り出してから、
好みの順に従ってソートを掛けることをお薦めします。
・ツリー全体表示

【79336】Re:フォルダ名一覧を古い順に取得
発言  カリーニン  - 17/7/28(金) 23:35 -

引用なし
パスワード
   FileSystemObject
で検索してみてください。
サブフォルダ取得や日付(作成日時や更新日時)を取得するとこが出来ます。
・ツリー全体表示

【79335】フォルダ名一覧を古い順に取得
質問  Kan  - 17/7/28(金) 23:05 -

引用なし
パスワード
   指定した場所にある複数のフォルダ名の一覧を、日付の古い順に取得したいです。
取得したいのは、フォルダ名と日付。
よろしくお願いします。
・ツリー全体表示

【79334】Re:RANDBETWEENについて
発言  カリーニン  - 17/7/26(水) 0:20 -

引用なし
パスワード
   もう一つ方法があるのを忘れてました。

[B2:U21] = "=RANDBETWEEN(0, 1)"
・ツリー全体表示

【79333】Re:RANDBETWEENについて
お礼  あああああ  - 17/7/19(水) 23:22 -

引用なし
パスワード
   ご丁寧に説明していただきまして、ありがとうございました。
載せてくださったサイトを参考に勉強します。
・ツリー全体表示

【79332】Re:RANDBETWEENについて
発言  カリーニン  - 17/7/18(火) 23:51 -

引用なし
パスワード
   ↓も参考になると思います。

ht tp://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_070_10.html

最初の

>Sheets("Sheet1").Range("B2:U21") = RandBetween(0, 1)

これは、Rangeオブジェクトのプロパティが省略されてますので、

Sheets("Sheet1").Range("B2:U21").Value = RandBetween(0, 1)

と同じことになります。Rangeオブジェクトのプロパティが省略されると、
デフォルトであるValueプロパティと判断されます。

今度は、右辺の

>RandBetween(0, 1)

は""で括られてないので、変数として宣言してない限り、エラーとなります。

式を埋め込む場合は

= "=式"

と代入してやります。
・ツリー全体表示

【79331】Re:RANDBETWEENについて
発言  カリーニン  - 17/7/18(火) 23:06 -

引用なし
パスワード
   式を残したくない場合は、↓のようにしてください。

With Worksheets("Sheet1").Range("B2:U21")
 .FormulaR1C1 = "=RandBetween(0, 1)"
 .Value = .Value
End With
・ツリー全体表示

【79330】Re:RANDBETWEENについて
発言  カリーニン  - 17/7/18(火) 22:57 -

引用なし
パスワード
   ワークシート関数を直接使う場合は↓のように書きます。

Sub test2()
Dim c As Range
Dim r As Range
Set r = Worksheets("Sheet1").Range("B2:U21")
For Each c In r
 c.Value = WorksheetFunction.RandBetween(0, 1)
Next c
Set r = Nothing
End Sub
・ツリー全体表示

【79329】Re:RANDBETWEENについて
発言  カリーニン  - 17/7/18(火) 22:44 -

引用なし
パスワード
   参考HPです。

ht tp://excelwork.info/excel/funcrnd/
・ツリー全体表示

【79328】Re:RANDBETWEENについて
発言  カリーニン  - 17/7/18(火) 22:41 -

引用なし
パスワード
   まず、基本書やヘルプ、解説サイトで勉強することをお勧めします。
正直言って、書き方がめちゃくちゃです。

Worksheets("Sheet1").Range("B2:U21").FormulaR1C1 = "=RandBetween(0, 1)"

これは、数式を埋め込んでますが、VBAで直接乱数を発生させることも可能です。
・ツリー全体表示

【79327】RANDBETWEENについて
質問  あああああ  - 17/7/18(火) 22:27 -

引用なし
パスワード
   VBA初心者です。

早速お聞きしたいのですが、Sheet1のB2からU21の範囲でランダムに0か1の値を表示させたくて以下のように記述しました。

Sub Macro()
  Sheets("Sheet1").Range("B2:U21") = RandBetween(0, 1)
End Sub

ですが、実行しようとするとコンパイルエラーが表示されてどこを直せばいいのか分かりません。
すみませんが回答のほどお待ちしております。
・ツリー全体表示

【79326】Re:指定したセルに貼り付け
発言  アリエス  - 17/7/15(土) 8:25 -

引用なし
パスワード
   ご指摘ありがとうございます。
丸投げに等しい質問に対して、恥ずかしく思っています。
現状、自力で作成しており、行き詰る点が出てくると思います。
その際にあらためて質問させて頂きたいと思います。
よろしくお願いします。
・ツリー全体表示

【79325】Re:指定したセルに貼り付け
発言  γ  - 17/7/15(土) 6:57 -

引用なし
パスワード
   こんにちは。

「質問者の方へのお願い」に下記のように書かれています。

●何をやったか書いてください
> おそらくあなたは、色々なことを試してできなかった末にここに質問を書くのでしょう。
> しかし回答者は、あなたが今まで何をやってきたか、何を知っていて何を
> 知らないかわかりません。
> 今まで試したこと、やろうと思ったけどやり方がわからなかったことなどを
> できるだけ詳しく書いてください。

●してはいけない質問について
> 困ったことは基本的にどんな質問をされてもかまわないのですが、その中でも
> 不適切な質問、というのがあります。以下のような質問は原則として
> しないでください。お願いします。
>      (中略)
>  ・丸投げ
>    「○○するにはどうすればいいか教えてください」といったような、
>    コードを最初から最後まで教えてもらうことを期待するような質問

どこまで作られたか示して、詰まっているところを具体的に質問して下さい。
万一まったく一行も書けないなら、まずは基本テキストを学習することをお薦めします。

---------------
さて、つまっているのはどこですか?
あなたがどの程度学習されている方なのか、まったく分かりません。
こちらはサービスセンターではありません。
自分でてきているところまで示して、不明な点に絞って質問するようにしましょう。

コピーペイストする骨格のコードは書けているのですか?
日にちが規則的に並んでいるなら、33行 (5 + 日)列 のデータをコピーペイストすればいいのですか。

日という数字を指定する方法は、Inputboxのヘルプを真似すればよいことです。

複数あるということは、どのように入力するのですか?それを示さないと。
書込先のセルは、上から順に詰めていくのですか?
・ツリー全体表示

【79324】Re:指定したセルに貼り付け
発言  とおりすがり  - 17/7/14(金) 23:44 -

引用なし
パスワード
   参考です。

ht tp://www.vbalab.net/bbspolicy.html
・ツリー全体表示

【79323】指定したセルに貼り付け
質問  アリエス  - 17/7/14(金) 23:41 -

引用なし
パスワード
   下記に記入してあるエクセルマクロを作成したいのですが教えて頂けますでしょうか。

1.日付を指定する。
※日付は単数または複数がある。
2.推移図1.xlsを開く。
sheet1のF32からAJ32まで日付が1日〜31まで入力してあります。
sheetは複数有り、sheet1と同様のセルをコピーさせます。
日付が入力してある、1行下にデータが入力してあり、
指定した日付のデータをコピーする。

3.推移図2を開く。
推移図1同様に、sheet1のF32からAJ32まで日付が1日〜31まで入力してあります。
sheetは推移図1と同様の名前のsheetがあります。
日付が入力してある、1行下にデータを入力する欄があり、指定したシートの
データ欄に貼り付けます。

※項目1について勉強も兼ねてInputBoxに入力とワークブックに日付を入力する2パターンで作成したい。
・ツリー全体表示

【79322】Re:オブジェクトエラーの理由
質問  γ  - 17/7/10(月) 21:07 -

引用なし
パスワード
   ちょっとお聞きしますが、
そのコードは、何から何までを繰り返しているのですか?
説明してもらえますか?

# エラーが出ないということと、
# 目的が達せられていることは、
# 同じとは限りませんよ。
・ツリー全体表示

【79321】Re:オブジェクトエラーの理由
お礼  oshiete  - 17/7/10(月) 13:00 -

引用なし
パスワード
   ▼γ さん:

すいません、自分が行と列を反対で覚えてました。
下記のように記載したら出来ました。

Sub test()


Dim i As Long

For i = 1 To Cells(1, 1).End(xlDown)

If Cells(i, 2).Value = Cells(i + 1, 2).Value Then
Range(Cells(i, 2), Cells(i + 1, 2)).Interior.ColorIndex = 3


End If

Next i

End Sub
・ツリー全体表示

【79320】Re:オブジェクトエラーの理由
お礼  oshiete  - 17/7/10(月) 12:58 -

引用なし
パスワード
   ▼カリーニン さん:

わかりました。
ありがとうございます。
行と列の定義を勘違いしてました。
下記のように書き換えたらできました↓↓↓

Sub test()

 Dim i As Long
 For i = 1 To Cells(1, 1).End(xlDown)

  If Cells(i, 2).Value = Cells(i + 1, 2).Value Then
  Range(Cells(i, 2), Cells(i + 1, 2)).Interior.ColorIndex = 3

  End If

 Next i

End Sub
・ツリー全体表示

【79319】Re:オブジェクトエラーの理由
発言  カリーニン  - 17/7/10(月) 10:26 -

引用なし
パスワード
   > >もで行指定の.row つけてないと列になりますよね??

意味不明です。

> Cells(1, 1).End(xlDown)

これの意味は分かってますか?ヘルプ等で調べてみましたか?

γさんのレスは見られましたか?
・ツリー全体表示

157 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free