Excel VBA質問箱 IV

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

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


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

【80685】Re:セル内の特定文字列から特定文字列の...
お礼  台所  - 19/4/4(木) 15:02 -

引用なし
パスワード
   >>よろずやさん

ご回答ありがとうございます。(返信遅れすみません;

いただいた内容を組み込みまして理想通りにいきました!
大変助かりました、効率化できそうです。
・ツリー全体表示

【80684】Re:ユーザー関数からセルの背景色の変更
回答  よろずや  - 19/4/4(木) 13:03 -

引用なし
パスワード
   ' ThisWorkbookモジュール
Option Explicit

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
  Call test(Sh)
End Sub

' 標準モジュール
Option Explicit
Dim Dic1 As Object ' Scripting.Dictionary

Function CellColor(Value, ColorIndex)
  CellColor = Value
  If Dic1 Is Nothing Then
    Set Dic1 = CreateObject("Scripting.Dictionary")
  End If
  If Dic1.Exists(Application.Caller.Address(External:=True)) Then
    Dic1.Item(Application.Caller.Address(External:=True)) = ColorIndex
  Else
    Dic1.Add Application.Caller.Address(External:=True), ColorIndex
  End If
End Function

Sub test(Sh) 'マクロ一覧に出さないために引数を付加
Dim Address As Variant
  For Each Address In Dic1.Keys
    Range(Address).Interior.ColorIndex = Dic1.Item(Address)
    Dic1.Remove Address
  Next Address
End Sub
・ツリー全体表示

【80683】Re:ユーザー関数からセルの背景色の変更
回答  γ  - 19/4/4(木) 6:21 -

引用なし
パスワード
   補足です。
あ、そうですね、条件付き書式の利用が良いでしょうね。
・単に、Rangeを引数に、Boolean値を返すユーザー関数を作成しておいて、
・その関数を使った式を条件付き書式の「ルール」で指定し、
・書式(塗りつぶし)部分は条件式書式に委ねる
ことで、万事目出度しということになるでしょう。

既に指摘いただいているように、
上記で不明なら、現在のユーザー定義関数を提示してもらえば回答可能ですね、

ちなみに、書式変更ができない仕様という点に関しては、
下記のMicrosoft社の作成記事を参照のこと。
「Excel のユーザー定義関数の制限について」
ht tps://support.microsoft.com/ja-jp/help/170787/description-of-limitations-of-custom-functions-in-excel
関数型プログラミング言語としてのExcelユーザー関数は、値を返すことが本務であって、
書式などはいわゆる「環境」に属すものであり、それを変更することは「副作用」とみなされるので、
言語仕様としてできないことになっているものと思います。
この制約はExcelのVersionには依存しない原則的なものだと思います。
・ツリー全体表示

【80682】Re:ユーザー関数からセルの背景色の変更
発言  マナ  - 19/4/3(水) 20:23 -

引用なし
パスワード
   ▼いびき さん:

どのような関数なのか、具体的に説明できますか。
試してみたコードでもよいです。

Changeイベントとか、条件付き書式では、できないのでしょうか。
・ツリー全体表示

【80681】Re:ユーザー関数からセルの背景色の変更
回答  γ  - 19/4/3(水) 18:38 -

引用なし
パスワード
   ユーザー定義関数で書式を変更することは
仕様上できません。
マクロを使って一括操作するなどの方法を
取ってください。
・ツリー全体表示

【80680】ユーザー関数からセルの背景色の変更
質問  いびき  - 19/4/3(水) 17:54 -

引用なし
パスワード
   ユーザー定義関数を作成しています。
当該の関数を実行しているセルの背景色を変更しようとすると関数の実行が停止し、セルには「#VALUE!」が表示されます。

Application.ThisCell.Interior.Color = RGB(0,255,0)

ウォッチから上記オブジェクトへ変更を行うと
実行時エラー'1004':
が表示されます。

Application.ThisCell.Font.Color
の変更は可能です。

変更方法の判る方がいらっしゃいましたらご教授いただけないでしょうか。
よろしくお願いします。
・ツリー全体表示

【80679】Re:セル内の特定文字列から特定文字列の...
回答  よろずや  - 19/4/3(水) 17:09 -

引用なし
パスワード
   こんな感じ。

Option Explicit
Sub Macro1()
Dim pos1 As Long
Dim pos2 As Long
Dim pos3 As Long
Dim pos4 As Long
  With Range("A1")
    pos1 = InStr(1, .Value, "あああ")
    pos2 = InStr(pos1, .Value, "いいい")
    pos3 = InStr(pos2, .Value, "ううう")
    pos4 = Len(.Value) + 1
    .Characters(Start:=pos1, Length:=pos2 - pos1).Font.Color = vbRed
    .Characters(Start:=pos2, Length:=pos3 - pos2).Font.Color = vbBlue
    .Characters(Start:=pos3, Length:=pos4 - pos3).Font.Color = vbGreen
  End With
End Sub
・ツリー全体表示

【80678】セル内の特定文字列から特定文字列のフォ...
質問  台所  - 19/4/3(水) 14:17 -

引用なし
パスワード
   【質問】
1つのセル内の特定文字列から特定文字列の直前までのフォント変更するExcel VBAコードがわかりません。


【例】
・「あああ」から「いいい」の上の行までを赤色にする
・「いいい」から「ううう」の上の行までを青色にする
・「ううう」以降を緑色にする

--A1セルここから--
あああ
25615615231

いいい
11156315619198
519615123455
516156131848132

ううう
156165121231

--A1セルここまで--


よろしくお願いいたします。
・ツリー全体表示

【80676】Re:条件に合った場合だけ、その行を非表...
発言  マナ  - 19/4/1(月) 22:19 -

引用なし
パスワード
   ▼ビギナー さん:

B123「高い」、または、C123「あり」だったら、


If Cells(123, "B").Value = "高い" Or Cells(123, "C").Value = "あり" Then
・ツリー全体表示

【80675】Re:条件に合った場合だけ、その行を非表...
発言  マナ  - 19/4/1(月) 22:12 -

引用なし
パスワード
   ▼ビギナー さん:

B123「高い」だったら、

If Range("B123").Value = "高い" Then
とか
If Cells(123, "B").Value = "高い" Then

が、わかりやすいでしょうか。
・ツリー全体表示

【80674】Re:条件に合った場合だけ、その行を非表...
発言  ビギナー  - 19/4/1(月) 21:30 -

引用なし
パスワード
   >マナさん、γさん

返信ありがとうございます。
ifを使った方法で試しているのですが、
どういうコードになるのかよく分からないのですよね・・。
ちょっともう少し試してみますが。
・ツリー全体表示

【80673】Re:WORKDAY関数をVBAで使用したい
お礼  みも  - 19/4/1(月) 18:23 -

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

>J1の書式を標準にしておけばよいだけかもしれませんが…

お世話になっております。

本日実験した所、workday関数の前にnumberformatlocalで標準に変換したら全てうまく動作しました。

的確なアドバイスを頂き、本当にありがとうございます。

今後とも質問させて頂くことがあるかと思いますが、お時間ありましたら何卒宜しくお願い致します。
・ツリー全体表示

【80672】Re:セルから日付を取得して、その日から...
発言  マナ  - 19/4/1(月) 14:40 -

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

本題とは別ですが

 
>  For i = 5 To Range("A65536").End(xlUp).Row

実際には、65535個もデータがないだろうから

Range("A10000").End(xlUp).Row

でも、よいです。
意味もわからず使うくらいであれば、
想定されるデータ数より大きい数字にしておけばよいです。

>  Rows(i & ":" & i).EntireRow.Hidden = True

間違いではありませんが、

Rows(i).Hidden = True

のほうが、簡単でわかりやすいです。
・ツリー全体表示

【80671】Re:セルから日付を取得して、その日から...
お礼  ぐら  - 19/4/1(月) 14:31 -

引用なし
パスワード
   .Value-2でよかったのですね!
ありがとうございます。無事動きました。
30になってエクセルをちゃんと使う仕事についたので四苦八苦しております
・ツリー全体表示

【80670】Re:セルから日付を取得して、その日から...
発言  マナ  - 19/4/1(月) 14:15 -

引用なし
パスワード
   ▼ぐら さん:
-
>
>Date - 2を該当セルの日-2にすれば良いと思うのですが、思い当たる関数を入れてもエラーしか起きません。
>たとえば、先にセルから日付を取得しておいて、その値をDate-2のところに入れるとValue <が成り立つというふうにはできるのでしょうか?


Dim 最終セル As Range

Set 最終セル = Range("A65536").End(xlUp)

こんな感じで、変数を使えば、
Date-2 のかわりに、最終セル.Value-2とできます。
・ツリー全体表示

【80669】セルから日付を取得して、その日から2日...
質問  ぐら  - 19/4/1(月) 7:16 -

引用なし
パスワード
   はじめまして。
仕事でマクロを使うことになり、勉強しながら組んでみたのですが躓いてしまいました。
A列の最終行のセルを読み取り、そのセルが今日より3日以前を非表示にするマクロを組んだのですが、
要望によりそのセルの日付より3日以前を非表示にできないかということになりました。
作業日にかかわらず2日前を消したいとのことです。


Sub Meas()
'
' Meas Macro
'

'  
  Dim i As Integer
  
  For i = 5 To Range("A65536").End(xlUp).Row
  If Range("A" & i).Value < Date - 2 Then
  Rows(i & ":" & i).EntireRow.Hidden = True
  End If
  
  Next i


Date - 2を該当セルの日-2にすれば良いと思うのですが、思い当たる関数を入れてもエラーしか起きません。
たとえば、先にセルから日付を取得しておいて、その値をDate-2のところに入れるとValue <が成り立つというふうにはできるのでしょうか?
・ツリー全体表示

【80668】Re:条件に合った場合だけ、その行を非表...
発言  γ  - 19/3/31(日) 17:55 -

引用なし
パスワード
   マナさんの発言を見ずに投稿してしまいました。
両方トライするとよいと思います。
たしかに、最短距離はオートフィルタですね。
・ツリー全体表示

【80667】Re:条件に合った場合だけ、その行を非表...
発言  γ  - 19/3/31(日) 17:52 -

引用なし
パスワード
   >if or thenを上手く使えばいけそうですが・・。
そのとおりです。

(1)非表示にする動作をマクロ記録すれば、非表示にする部分は得られます。
(2)比較するところはそのままですよ。
(3)最終行を求めるのは Cellls(Rows.Count,1).End(xlUp).Row です。
  あとは2行目から最終行までの繰り返しのことろも難しくはないです。
ご自分でトライすることが一番力をつける道です。
「いけそう」で止まっていたらもったいないです。
トライしてみて下さい。
詰まったところがあれば、具体的に質問して下さい。
・ツリー全体表示

【80666】Re:条件に合った場合だけ、その行を非表...
発言  マナ  - 19/3/31(日) 17:37 -

引用なし
パスワード
   ▼ビギナー さん:

手作業では、オートフィルタが簡単です。
それをマクロにすることも可能です。
・ツリー全体表示

【80665】条件に合った場合だけ、その行を非表示に...
質問  ビギナー  - 19/3/31(日) 17:26 -

引用なし
パスワード
   セルA1に「品名」、B1に「値段」、C1に「セール予定」と入力されている。

A2、A3、A4・・・と延々と商品名が記載されている。
B2、B3、B4・・・と所々に「高い」と入力されている。
C2、C3、C4・・・と所々に「あり」と入力されている。

※A列の商品数は増減があるので、範囲は不定になります。それに伴い、B列、C列も不定になります。

もし、A列の商品名おいて、隣接するB列が「高い」もしくはC列が「あり」だったら、
その行を非表示にするにはどういうコードを書けば良いでしょうか?
if or thenを上手く使えばいけそうですが・・。

例1:A123「バッグ」 B123「高い」 C123(未記入)だったら、その行を非表示にする。

例2:A64「スカーフ」 B64(未記入)C64「あり」だったら、その行は非表示にする。

拙い説明で申し訳ありません、ご教授よろしくお願いします。
・ツリー全体表示

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