ジメジメする梅雨のお悩み、一挙解決! >>

エクセルで以下の事をしたいと考えていますが出来ません。
どなたか教えて下さい。
例として、
A列のセルに、●と◯と空白のセルがあります。
図示しますと以下のようになっています。
   A
1
2
3  ◯
4
5
6  ●
7
8  ●
9
10

となっているものを
例えば、A1から数えて、A6にある●は5つ目にあるので、●を5に替える。
A8の●はA6から数えて、2つ目なので、●を2に替える。
A3にある◯は無視してそのままとしたのですが、
DO~ Loopステートメント
Sub 空白()
Dim i As Integer
i = 1
Range("A1").Select
Do Until ActiveCell.Offset(1)(ActiveCell = "●")
ActiveCell.Offset(1).Select
i = i + 1
If ActiveCell <> "" Then Exit Do
Loop
ActiveCell.Value = i
ActiveCell.Offset(1).Select
End sub
まで考えたのですが、◯を無視することと、変数iを初期化する方法が解りません。
よろしくお願いします。

質問者からの補足コメント

  • うれしい

    早速ご教示いただき有難うございます。
    追加の質問なのですが、
    一つ目に、行の初めではなしに終わりからカウントするにはどうしたら良いのでしょう?
    二つ目に、○はそのままですが、●以外に、数字などがあっても●と同じようにカウントして数字に置き換えはできるのでしょうか?
    三つ目に、どの列でも出来るようにはどのようにすればいいのでしょう。
    追加でご教示いただければ、幸甚に思います。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/07/16 17:41
  • うれしい

    早速ご教示いただき有難うございます。
    追加の質問なのですが、
    一つ目に、行の初めではなしに終わりからカウントするにはどうしたら良いのでしょう?
    二つ目に、○はそのままですが、●以外に、数字などがあっても●と同じようにカウントして数字に置き換えはできるのでしょうか?
    三つ目に、どの列でも出来るようにはどのようにすればいいのでしょう。
    追加でご教示いただければ、幸甚に思います。

    No.2の回答に寄せられた補足コメントです。 補足日時:2017/07/16 17:41

A 回答 (5件)

No.4 の補足



字下げが無いと見難いのでイメージを付けておきます。
「エクセルVBA 初心者です。どなたか教え」の回答画像5
    • good
    • 0

「補足コメントについて」こんなのはいかがですか?


-------------------------------------------------------------------
Sub 一つ目プラス二つ目()
Dim 元 As Long
Dim 行 As Long
Dim 終 As Long
終 = Cells(Rows.Count, 1).End(xlUp).Row
For 行 = 終 To 1 Step -1
If Cells(行, 1).Value <> "" Then
If Cells(行, 1).Value <> "◯" Then
If 元 = 0 Then
Cells(行, 1).Value = 0
Else
Cells(行, 1).Value = 元 - 行
End If
元 = 行
End If
End If
Next
End Sub
-------------------------------------------------------------------
    • good
    • 0

No.2 の補足コメントについて



一つ目
一番下の「●」は「0」にしてカウントするのでしょうか?

二つ目
「●」や「数字」はそれぞれ別にカウントするのでしょうか?

三つ目
「Cells(Rows.Count, 1)」の「1」をその列番号(左から何列目)にする
「Cells(行, 1)」の「1」をその列番号にする
    • good
    • 0
この回答へのお礼

ありがとう

再度、迅速にご教示いただきましてありがとうございます。
>一番下の「●」は「0」にしてカウントするのでしょうか?
そのとおりです。
>二つ目
「●」や「数字」はそれぞれ別にカウントするのでしょうか?
「数字」は「●」と同じとお考え下さい。数字が間違っている場合があるかもしれませんので、カウントをし直すということで、「●」と同じです。
>三つ目は、その通りさせていただきます。

何度もになりますがよろしくお願い申し上げます。

お礼日時:2017/07/16 20:15

こんなのはいかがでしょうか?


-------------------------------------------------------------------
Sub 空白()
Dim 元 As Long
Dim 行 As Long
Dim 終 As Long
元 = 1
終 = Cells(Rows.Count, 1).End(xlUp).Row
For 行 = 1 To 終
If Cells(行, 1).Value = "●" Then
Cells(行, 1).Value = 行 - 元
元 = 行
End If
Next
End Sub
-------------------------------------------------------------------
この回答への補足あり
    • good
    • 0
この回答へのお礼

早速のご教示ありがとうございます。
使う関数が間違っていたのですね。

お礼日時:2017/07/16 17:33

書き換えてみました。

これで、どうでしょうか。
Sub 空白()
Dim i As Integer
Dim maxrow As Long
Dim row As Long
maxrow = Cells(Rows.Count, 1).End(xlUp).row 'Active sheet A列の最大行取得
i = 0
For row = 1 To maxrow
If Cells(row, "A").Value = "●" Then
Cells(row, "A").Value = i
i = 0
End If
i = i + 1
Next
End Sub
この回答への補足あり
    • good
    • 0
この回答へのお礼

早速のご教示ありがとうございます。
使う関数が間違っていたのですね。

お礼日時:2017/07/16 17:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qコピー&ペーストではなく数式やエクセルの機能を使ってデータを反映させたい。

下記の「表①」のエクセルデータを、「表②」に反映させたいです。
「表②」のB3セルに、数式を入れて、「表①」のログイン・ログオフ時刻を「表②」へ
自動反映させたいのですが、どのような式を入れたらいいかがわかりません。

現状は、目視とコピー&ペーストで表①→表②へ貼りつけていますが、
スタッフの数が多いのとシフト勤務で出勤日数も時間もバラバラで、作業が大変です。

また、早くて正確なら他の方法でもいいです。
よろしくお願いします。


表①
A B C D E
1 氏名 日付 ログイン 日付 ログオフ
2 田中 舞子 2017/5/16 8:21:35 2017/5/16 17:34:38
3 田中 舞子 2017/5/17 8:22:40 2017/5/17 17:35:00
4 田中 舞子 2017/5/18 8:28:02 2017/5/18 17:35:55
5 田中 舞子 2017/5/19 8:22:09 2017/5/19 17:34:18
6 田中 舞子 2017/5/22 8:18:03 2017/5/22 17:33:13
7 三田 建造 2017/5/23 8:19:55 2017/5/23 17:39:44
8 三田 建造 2017/5/25 8:21:03 2017/5/25 17:38:04
9 三田 建造 2017/5/26 8:17:45 2017/5/26 17:31:54
10 三田 建造 2017/5/29 8:19:42 2017/5/29 17:32:39
11 三田 建造 2017/5/30 8:20:12 2017/5/30 17:33:26
12 牧 重三 2017/5/31 16:18:33 2017/5/31 23:31:36
13 牧 重三 2017/6/1 16:20:08 2017/6/1 23:35:33
14 牧 重三 2017/6/2 17:18:35 2017/6/2 23:41:05
15 牧 重三 2017/6/5 15:20:00 2017/6/5 23:31:54
16 牧 重三 2017/6/6 19:22:05 2017/6/6 23:41:14
17 長岐 知美 2017/6/7 8:25:48 2017/6/7 17:34:38
18 長岐 知美 2017/6/8 8:26:24 2017/6/8 17:36:52
19 長岐 知美 2017/6/9 8:26:01 2017/6/9 17:34:08
20 長岐 知美 2017/6/12 8:19:24 2017/6/12 17:32:02
21 篠田 亜紀 2017/5/21 8:19:14 2017/5/21 17:32:29
22 柿田 輝未 2017/5/28 7:34:55 2017/5/28 17:17:54
23 荒元 耕平 2017/6/4 7:32:49 2017/6/4 17:32:50
24 佐田 容子 2017/6/11 8:18:35 2017/6/11 17:41:05
25 藤島 澄人 2017/6/12 8:25:15 2017/6/12 17:59:55
26 藤島 澄人 2017/6/13 8:45:31 2017/6/13 17:41:06
27 藤島 澄人 2017/6/14 8:05:34 2017/6/14 17:28:14
28 藤島 澄人 2017/6/15 8:13:25 2017/6/15 17:30:24


表②
   A B C D E F G
1 田中 舞子 三田 建造 牧 重三 ・・・・
2 日付 ログイン ログオフ ログイン ログオフ ログイン ログオフ
3 2017/5/16 B3
4 2017/5/17
5 2017/5/18
6 2017/5/19
7 2017/5/20
8 2017/5/21
9 2017/5/22
10 2017/5/23
11 2017/5/24
12 2017/5/25
13 2017/5/26
14 2017/5/27
15 2017/5/28
16 2017/5/29
17 2017/5/30
18 2017/5/31
19 2017/6/1
20 2017/6/2
21 2017/6/3
22 2017/6/4
23 2017/6/5
24 2017/6/6
25 2017/6/7
26 2017/6/8
27 2017/6/9
28 2017/6/10
29 2017/6/11
30 2017/6/12
31 2017/6/13
32 2017/6/14
33 2017/6/15

下記の「表①」のエクセルデータを、「表②」に反映させたいです。
「表②」のB3セルに、数式を入れて、「表①」のログイン・ログオフ時刻を「表②」へ
自動反映させたいのですが、どのような式を入れたらいいかがわかりません。

現状は、目視とコピー&ペーストで表①→表②へ貼りつけていますが、
スタッフの数が多いのとシフト勤務で出勤日数も時間もバラバラで、作業が大変です。

また、早くて正確なら他の方法でもいいです。
よろしくお願いします。


表①
A B ...続きを読む

Aベストアンサー

表①のB列ですが、シリアル値「2017/5/16 8:21:35」を表示形式で「2017/5/16」と表示していませんか?もしそうであればNGです。B2セルは時刻の部分をゼロにしてください。

2人ログオンする日がある件ですが、残念ながら、この方式では実現できません。
No.1 chonamiさんの案が一番簡単そうです。たぶん、こんな感じを想定していると思われます。

【B3セル】=SUMIFS(表①!$C:$C,表①!$A:$A,B$1,表①!$B:$B,$A3)
※C3セルは、上記を参考にご自分で考えてみて下さい。

Qエクセルの式がわかりません、教えてください。

fujillinさん解り易くしました。

報告書を作成する際、入力内容から、A(業務報酬)
とB(預り金)を選ばせようとしていますが、うまく表示されません。どこがいけないのでしょうか?

パターンは4つありますが、
もし、$AP$7="×" ×で(請求書が弊社宛ではなくて)
NOT('!$AL$7="")文字式が空欄じゃなかったら(下請会社名の記載が有ったら)
B =$V$18(預り金)

もし、$AP$7="×" ×で(請求書が弊社宛ではなくて)
NOT('!$AL$7="")文字式が空欄じゃなかったら(下請会社名の記載が無かったら)
この事例はあり得ませんので削除

もし、$AP$7="○" ○で(請求書が弊社宛)
('!$AL$7="")文字式が空欄だったら(下請会社名の記載が無かったら)
A =$V$19(業務報酬)金額的には100%
もし、$AP$7="○" ○で(請求書が弊社宛)
NOT('!$AL$7="")文字式が空欄じゃなかったら(下請会社名の記載が有ったら)
A =$V$19(業務報酬)金額的には50%

を選ばせようとしています。

疑問点の $AT$7=(支払金額)は上記の式に関係ないものとして削除しました。

以下の文書では、もし、$AP$7="×"(請求書が弊社宛ではなくて)で $AT$7=""(支払金額の記載が無かったら)A=$V$19(業務報酬)

もし、$AP$7="○"(請求書が弊社宛で)、,NOT($AL$7==""(下請会社名の記載が有ったら)、A=$V$19(業務報酬)
そうでなければ、B=$V$18(預り金)

=IF(AND($AP$7="×",$AT$7=””),$V$19,IF(OR($AP$7="○",NOT($AL$7="")),'$V$19,$V$18))

改善策1として
=IF($AP$7="×",$V$18,$V$19)を入れてみましたが、
もし請求書が弊社宛では無ければ、預り金、そうでなければ業務報酬

もし、$AP$7="○" ○で(請求書が弊社宛)
($AL$7="")文字式が空欄だったら(下請会社名の記載が無かったら)
A =$V$19(業務報酬)
がうまくいきません。


改善策2として
=IF(OR($AP$7="○",NOT($AL$7="")),$V$18,$V$19)で作成しましたが、間違っていました。
(請求書が弊社宛)または(下請会社名の記載が有ったら)、業務報酬、そうでなければ預り金


パターン例
請求書が弊社宛 請求書が弊社宛じゃない
下請会社有 業務報酬 預り金
下請会社無 業務報酬 -

fujillinさん解り易くしました。

報告書を作成する際、入力内容から、A(業務報酬)
とB(預り金)を選ばせようとしていますが、うまく表示されません。どこがいけないのでしょうか?

パターンは4つありますが、
もし、$AP$7="×" ×で(請求書が弊社宛ではなくて)
NOT('!$AL$7="")文字式が空欄じゃなかったら(下請会社名の記載が有ったら)
B =$V$18(預り金)

もし、$AP$7="×" ×で(請求書が弊社宛ではなくて)
NOT('!$AL$7="")文字式が空欄じゃなかったら(下請会社名の記載が無かった...続きを読む

Aベストアンサー

またしても添付画像が判別できないですけど。
細かく書いても表示される画像は縮小されてしまうので、
それでもわかるように工夫(画像をトリミング;必要な部分以外は切り捨てる)する必要があります。
その方法は質問に関係ないので省きます。

画像のものを憶測で簡略化したものを添付します。
これで式を考えてみます。

私が回答投稿して良い空気なのかわからないけど…

■APが「○」の場合
ALやAYの内容がどうであれ、結果は全て「業務報酬」になります。

これを、IF関数を使って表すと以下のようになります。

=IF(AP="○","業務報酬",【AP="×"の場合の処理】)   …【式1】

これで、条件①~④の場合の処理は完了。

■APが「×」の場合
結果が「業務報酬」と「預り金」のどちらかになります。
どの条件で結果が分岐するのか、見てみると・・・

AYに金額の記入があるか、無い(空欄)かで違います。

これを、IF関数を使って表すと以下のようになります。

=IF(AY<>"","業務報酬","預り金")   …【式2】

これで、条件⑤~⑧の場合の処理は完了。

■合体!

(式1)と(式2)を合体させると、条件①~⑧全てを処理できる式になります。
ではやってみましょう。

=IF(AP="○","業務報酬",【AP="×"の場合の処理】)
   ↓
=IF(AP="○","業務報酬",【式2】)
   ↓
=IF(AP="○","業務報酬",IF(AY<>"","業務報酬","預り金"))   …完成!

※もちろん、「AP」「AY」だけだとセルになっていないので、行番号も加えて下さい。


■疑問
あくまで、私が画像から読み取った条件で考えたのですが

AL(業者名の有無)については、結果表示させるにあたり、条件として不要だと思います。

条件④と条件①の違いは?(画像で判別不可)

条件④と条件⑧は無いパターンとのことでしたので、
データミスでも存在しえないないものと解釈しまして、
敢えてそのようなケースが合った場合のエラー処理などは含めていません。

---------------------
★別解
添付した表を前提条件としての別解を。

条件がいくつもあっても、結果が「預り金」となるパターンは条件⑦、ただ1つのみ。

そこだけをIFで判別します。

=IF(AND(AP="×",AY=""),"預り金","業務報酬")

こんなにシンプルになります。
※もちろん、「AP」「AY」だけだとセルになっていないので、行番号も加えて下さい。

またしても添付画像が判別できないですけど。
細かく書いても表示される画像は縮小されてしまうので、
それでもわかるように工夫(画像をトリミング;必要な部分以外は切り捨てる)する必要があります。
その方法は質問に関係ないので省きます。

画像のものを憶測で簡略化したものを添付します。
これで式を考えてみます。

私が回答投稿して良い空気なのかわからないけど…

■APが「○」の場合
ALやAYの内容がどうであれ、結果は全て「業務報酬」になります。

これを、IF関数を使って表すと以下のようになります...続きを読む

QVBAで 別シート(関数が入っている)をB列からに貼り付けるVBAを教えてください。

マクロ超・超初心者です。

【集計用データシート】のデータを【提出用シート】の最終行B列以降にコピーしたいのですが
【提出用シート】のA列が空白にしているためなのか、どうしてもうまくできません。
もう五里霧中です。

概要:
【集計用データシート】は
F7からK16に入っていますが、それぞれのセルは関数を使い、別シートのデータを集計したり日付などを入力させています。
また、F7からK16までのデータは、7行目から16行まで必ずデータがあるとは限りません。日によって7行目にしかデータがない場合もあるし、7行目から16行目までデータがある場合もあります。

【提出用シート】には
データが入っていない最終行のB列からG列に【集計用データシート】のデータを行ごとに貼り付けます。

詳細:
【集計用データシート】
F列7行目から16行目:オーダ番号(別シートのデータを関数を使ってオーダ番号が
                 重複しないよう抽出)
G列7行目から16行目:個数    (別シートのデータを関数を使いオーダ毎の個数を
        集計)
H列7行目から16行目:納期   (別シートのデータを関数を使い納期の日を
                 自動入力)
I列7行目から16行目:寸法確定 (関数を使いF列が空白でない場合、固定文字&quot;寸法確
                定&quot;を入力)
J列7行目から16行目:ABC    (関数を使いF列が空白でない場合、固定文字&quot;AB
                 C&quot;を入力)
K列7行目から16行目:2017/07/08(関数を使いF列が空白でない場合、関数を使い今日
                 の日付を入力)         
      


【提出用シート】B7からG7以降の最終空白行に【集計用データシート】のデータを[行ごとに(例:7行目F列からK列)貼り付けます。
A列:空白にします(必要に応じて後日データを変更した日を入力するため)
B列:AシートのF列(オーダ番号)
C列:AシートのG列(個数)
D列:AシートのH列(納期)
E列:AシートのI列(&quot;寸法確定&quot;)
F列:AシートのJ列(&quot;ABC&quot;)      
G列:AシートのK列(日付)

いろいろ調べたのですがどうしても分かりません。
丸投げの形になり大変申し訳ないですが、よろしくお願いします。

マクロ超・超初心者です。

【集計用データシート】のデータを【提出用シート】の最終行B列以降にコピーしたいのですが
【提出用シート】のA列が空白にしているためなのか、どうしてもうまくできません。
もう五里霧中です。

概要:
【集計用データシート】は
F7からK16に入っていますが、それぞれのセルは関数を使い、別シートのデータを集計したり日付などを入力させています。
また、F7からK16までのデータは、7行目から16行まで必ずデータがあるとは限りません。日によって7行目にしかデータがない...続きを読む

Aベストアンサー

以下のマクロを標準モジュールへ登録してください。
シート名が不明でしたので、「集計用データ」と「提出用」にしています。もし、異なる場合は適切に変更してください。

Option Explicit
Public Sub データコピー()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim row1 As Long
Dim row2 As Long
Dim fromRng As String
Dim toRng As String
Set sh1 = Worksheets("集計用データ")
Set sh2 = Worksheets("提出用")
row2 = sh2.Cells(Rows.Count, "B").End(xlUp).Row + 1
For row1 = 7 To 16
If sh1.Cells(row1, "F").Value = "" Then Exit For
fromRng = "F" & row1 & ":K" & row1
toRng = "B" & row2 & ":G" & row2
sh2.Range(toRng).Value = sh1.Range(fromRng).Value
row2 = row2 + 1
Next
MsgBox ("コピー完了")
End Sub

以下のマクロを標準モジュールへ登録してください。
シート名が不明でしたので、「集計用データ」と「提出用」にしています。もし、異なる場合は適切に変更してください。

Option Explicit
Public Sub データコピー()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim row1 As Long
Dim row2 As Long
Dim fromRng As String
Dim toRng As String
Set sh1 = Worksheets("集計用データ")
Set sh2 = Worksheets("提出用")
row2 = sh2.Cells(Rows.Count, "B").End(xlUp).Row + 1
...続きを読む

QVBAか関数でできるのでしょうか?

いつもこちらで皆さんに助けていただいてます。昨日質問しましたが画像が張り付けられていなかったので再度質問です。

”仕入表”タブに入力されたデータが横並びのデータです。
例えば、商品コード/品名/価格/色/入荷数 の並び順で、入力されています。一つの品番に対して色数は1から10個あり、色/入荷数/色/入荷数という風に構成されてます。

そこでこちらでお世話になり、仕入表に入力したデータを縦並びに色別で”在庫表”タブに表を作れるようなVBAを教えていただきました。

画像の仕入表は上の表で、下の表が在庫表に転記されたときの例です。
因みにその時のVBAはこちらです。


Sub Sample4() '//この行から
Dim i As Long, j As Long, cnt As Long, lastRow As Long, wS As Worksheet
Application.Calculation = xlCalculationManual
Set wS = Worksheets("仕入表")
With Worksheets("在庫表")
'//E列で「在庫表」Sheetの最終行取得★
lastRow = .Cells(Rows.Count, "E").End(xlUp).Row
'//「在庫表」SheetにデータがあればD列2行目~I列最終行データを一旦消去
If lastRow > 1 Then
.Range(.Cells(2, "D"), .Cells(lastRow, "I")).ClearContents
End If
cnt = 1
For i = 3 To wS.Cells(Rows.Count, "A").End(xlUp).Row '//「仕入表」Sheetの3行目~A列最終行まで
For j = 5 To wS.Cells(i, Columns.Count).End(xlToLeft).Column Step 2 '//E列~i行最終列まで2行毎★
If wS.Cells(i, j) <> 0 Then '//画像で「0」が表示されているので「0」以外を追加★
cnt = cnt + 1
'//最初のデータ行のみ「仕入表」Sheetの日付をD列に表示★
If j = 5 Then
.Cells(cnt, "D") = wS.Cells(i, "A")
End If
.Cells(cnt, "E") = wS.Cells(i, "B") '//B列に「コード」を表示
.Cells(cnt, "F") = wS.Cells(i, "C") '//F列に「商品名」を表示
.Cells(cnt, "G") = wS.Cells(i, "D") '//G列に「下代」を表示
.Cells(cnt, "H") = wS.Cells(i, j) '//H列に「色」を表示
.Cells(cnt, "I") = wS.Cells(i, j + 1) '//I列に「数」を表示
End If
Next j
Next i
'//最後にD列の表示形式(日付)を「在庫表」SheetのA3セルの書式に設定★
.Range("D1", Cells(Rows.Count, 4).End(xlUp)).NumberFormatLocal = wS.Range("A3").NumberFormatLocal
End With
Application.Calculation = xlCalculationAutomatic
End Sub '//この行まで


そこで、また新たにもしできるなら教えていただきたいことが出てきました。
仕入表タブのC列に出荷した商品が出たら「出荷済」と入力していますが(画像ではA列から埋まってますが実際はA~Cは空白にしてます)、”出荷済”にしたときに在庫表タブの同じ品番の商品すべて(日付~すべての色の個数まで)を黄色の色付けにすることはできますか?
もしできるとすごく楽になるのですが・・・
それではよろしくお願いします。

いつもこちらで皆さんに助けていただいてます。昨日質問しましたが画像が張り付けられていなかったので再度質問です。

”仕入表”タブに入力されたデータが横並びのデータです。
例えば、商品コード/品名/価格/色/入荷数 の並び順で、入力されています。一つの品番に対して色数は1から10個あり、色/入荷数/色/入荷数という風に構成されてます。

そこでこちらでお世話になり、仕入表に入力したデータを縦並びに色別で”在庫表”タブに表を作れるようなVBAを教えていただきました。

画像の仕入表は上の表で...続きを読む

Aベストアンサー

No6です。
以下の箇所を修正しました。前回のマクロをこれで入れ替えてください。
1)エラー13で型が一致しません。・・・この対策
色の箇所が0以外なら処理しているのを、空白以外なら処理するようにしました。
2)今更ですが黄色の色付けを日付の列だけにすることは可能でしょうか。
日付の列だけ黄色にしました。
-------------------------------------------------------
Sub Sample4() '//この行から
Dim i As Long, j As Long, cnt As Long, lastRow As Long, wS As Worksheet
Dim wns As Worksheet
Application.Calculation = xlCalculationManual
Set wS = Worksheets("仕入表")
Set wns = Worksheets("納品仕訳")
Worksheets("在庫表").Activate '追加
With Worksheets("在庫表")
'//E列で「在庫表」Sheetの最終行取得★
lastRow = .Cells(Rows.Count, "E").End(xlUp).Row
'//「在庫表」SheetにデータがあればD列2行目~I列最終行データを一旦消去
If lastRow > 1 Then
.Range(.Cells(2, "D"), .Cells(lastRow, "I")).ClearContents
.Range(.Cells(2, "D"), .Cells(lastRow, "I")).Interior.Pattern = xlNone
End If
cnt = 1
For i = 3 To wS.Cells(Rows.Count, "A").End(xlUp).Row '//「仕入表」Sheetの3行目~A列最終行まで
For j = 5 To wS.Cells(i, Columns.Count).End(xlToLeft).Column Step 2 '//E列~i行最終列まで2行毎★
If wS.Cells(i, j) <> "" Then '//画像で「0」が表示されているので「0」以外を追加★ '修正
cnt = cnt + 1
'//最初のデータ行のみ「仕入表」Sheetの日付をD列に表示★
If j = 5 Then
.Cells(cnt, "D") = wS.Cells(i, "A")
End If
.Cells(cnt, "E") = wS.Cells(i, "B") '//B列に「コード」を表示
.Cells(cnt, "F") = wS.Cells(i, "C") '//F列に「商品名」を表示
.Cells(cnt, "G") = wS.Cells(i, "D") '//G列に「下代」を表示
.Cells(cnt, "H") = wS.Cells(i, j) '//H列に「色」を表示
.Cells(cnt, "I") = wS.Cells(i, j + 1) '//I列に「数」を表示
If wns.Cells(i + 2, "C").Value = "出荷済" Then
.Range("D" & cnt).Interior.Color = 65535 '修正
End If
End If
Next j
Next i
'//最後にD列の表示形式(日付)を「在庫表」SheetのA3セルの書式に設定★
.Range("D1", Cells(Rows.Count, 4).End(xlUp)).NumberFormatLocal = wS.Range("A3").NumberFormatLocal
End With
Application.Calculation = xlCalculationAutomatic
End Sub '//この行まで
-------------------------------------

No6です。
以下の箇所を修正しました。前回のマクロをこれで入れ替えてください。
1)エラー13で型が一致しません。・・・この対策
色の箇所が0以外なら処理しているのを、空白以外なら処理するようにしました。
2)今更ですが黄色の色付けを日付の列だけにすることは可能でしょうか。
日付の列だけ黄色にしました。
-------------------------------------------------------
Sub Sample4() '//この行から
Dim i As Long, j As Long, cnt As Long, lastRow As Long, wS As Worksheet
Dim wns As Works...続きを読む

Qエクセル詳しい方!!お願いします! =IF(会計簿!$C$6=”13-ア”,”会計簿!$A$6”,I

エクセル詳しい方!!お願いします!

=IF(会計簿!$C$6=”13-ア”,”会計簿!$A$6”,IF(会計簿!$C$6=”13-イ”,”会計簿!$A$6”,IF(会計簿!$C$6=”13-ウ”,”会計簿!$A$6”,IF(会計簿!$C$6=”13-エ”,”会計簿!$A$6,””))))
の返しが会計簿!$A$6になるのを会計簿!$A$6に入力されている値にしたい!

Aベストアンサー

あらら・・・、今度は絶対参照にしていませんでした ><
=IF(OR(会計簿!$C$6="13-"&{"ア","イ","ウ","エ"}),会計簿!$A$6,"")

これが正解ですね _ノフ○)))グタリ

Qマクロで消去したいです

たびたび同じ質問をしてしまい申し訳ありません
以前教えてもらった
Sub Sample()

Dim c As Range, cbx As Object
Dim rw As Long
Dim t As Single, h As Single, w As Single
Dim y As Single, v As Boolean, f As Boolean

For rw = 6 To 15
Set c = Cells(rw, 1)
t = c.Top
h = t + c.Height
w = c.Width
f = False

' Form Control
For Each cbx In ActiveSheet.CheckBoxes
y = cbx.Top + cbx.Height / 2
If t < y And y < h And cbx.Left < w Then
f = True
If cbx.Value = xlOn Then v = True Else v = False
Exit For
End If
Next cbx

' ActiveX Control
If Not f Then
For Each cbx In ActiveSheet.OLEObjects
If TypeName(cbx.Object) = "CheckBox" Then
y = cbx.Top + cbx.Height / 2
If t < y And y < h And cbx.Left < w Then
f = True
v = cbx.Object.Value
Exit For
End If
End If
Next cbx
End If

If f And v Then
Cells(rw, 3).Resize(, 3).ClearContents
Cells(rw, 16).Resize(, 2).ClearContents
End If
Next rw

End Sub
でシート「操作画面」のC13:E13,P13:Q13 C15:E15,P15:Q15は消去することができました
それを応用して別シート「集計」のI7:I12 K7:K12も合わせて消去しようかと思ったのですが上手く
動作しませんでした

大変申し訳ないのですが、また、ご指導のほどよろしくお願いいたします

たびたび同じ質問をしてしまい申し訳ありません
以前教えてもらった
Sub Sample()

Dim c As Range, cbx As Object
Dim rw As Long
Dim t As Single, h As Single, w As Single
Dim y As Single, v As Boolean, f As Boolean

For rw = 6 To 15
Set c = Cells(rw, 1)
t = c.Top
h = t + c.Height
w = c.Width
f = False

' Form Control
For Each cbx In ActiveSheet.CheckBoxes
y = cbx.Top + cbx.Height / 2
If t < y And y < h And cbx.Left < w Then
f ...続きを読む

Aベストアンサー

前回回答者です。

最初に、前回の説明と重複になってしまいますが・・・
https://oshiete.goo.ne.jp/qa/9807697.html

説明にもありますように、通常はセルとチェックボックスの関係をきちんと取れるようにしておいてから、マクロを作成するものと思います。
その意味において、前回のNo1様、No3様の回答は関係性を確かなものにする方法を提示なさっています。

No2の回答は、それらの情報が与えられないので、しかたなく見た目から推測する方法で処理したものですので、正確性や効率性の点であまり良いものとは言えません。
また、チェックボックスも複数の種類が想定でき、どちらなのかが不明でしたので、両方を考慮しましたが、実際には(常識的に)どちらか一方だけの利用であると推測できますので、結果的に残り半分のコードは不要ということになります。
さらに、きちんと関係性が取れている場合は、位置関係から探す必要もなくなるので、コードも大幅に短くできるはずですが、不明な状況でしたので、ひとまず冗長なコードであっても提示しておけば、後は、質問者様がアレンジなさるであろうことを期待しての回答でした。


今回のご質問で、
・それを応用して~~
・〇〇も合わせて消去しようかと~
・上手く動作しませんでした
「応用する」、「うまく動作しない」という情報だけから推理しようとしても、あまりにも可能性が広がりすぎてしまって皆目見当がつきません。

多少なりともヒントになりそうな情報として記せそうなのは、前回の回答で「セルの内容を消去している」部分は
> Cells(rw, 3).Resize(, 3).ClearContents
> Cells(rw, 16).Resize(, 2).ClearContents
の2行である、ということぐらいでしょうか。
(この部分に関しては、前回のNo3様と、たまたま同様の記述になっています)
ANo3様のコードの方が、シートを明記する形式で対象を指定していますので、より明確な記述方法になっていると言えるかもしれません。

ちなみに
>別シート「集計」のI7:I12 K7:K12を消去する
という部分だけであれば、
 Worksheets("集計").Range("I7:I12,K7:K12").ClearContents
のような記述で実現できるはずと思います。

前回回答者です。

最初に、前回の説明と重複になってしまいますが・・・
https://oshiete.goo.ne.jp/qa/9807697.html

説明にもありますように、通常はセルとチェックボックスの関係をきちんと取れるようにしておいてから、マクロを作成するものと思います。
その意味において、前回のNo1様、No3様の回答は関係性を確かなものにする方法を提示なさっています。

No2の回答は、それらの情報が与えられないので、しかたなく見た目から推測する方法で処理したものですので、正確性や効率性の点であまり良いものとは...続きを読む

Q複数のexcelファイルを一つにするには

formatが全く同じとは言えないが、月報があります。
これを結合して一つのファイルにしようと思っています。
一件ずつを呼び出し、コピーする方法しか思い浮かびません。
それでは年報に直すのに、同じことを12回する必要あります。
列幅や列数が異なる場合があるかも知れません。
その場合は一旦結合した後、個別に修正しようと思っています。
良い方法ありませんか。

Aベストアンサー

何度実行しても良いようになっていますのでもう一度最初から実行してみてください。
ちなみに、マクロを入れたファイルは開始時と終了時に毎回消去しているので何も表示されないはずです。出来上がった「友の会・観察会資料2017.xlsx」はどうなっていますか?

まさかとは思いますが、このマクロを記録したファイルの名前は「友の会・観察会資料2017.xlsx」や「友の会・1月観察会資料2017.xlsx」などにはしていませんよね?

多分間違いだと思うので勝手に直しましたが、もちろん「友の会・1月観察会資料2014.xclx」などは「友の会・1月観察会資料2014.xlsx」などの間違いですよね?

QExcelの計算式を教えてください

下記のような場合のExcelの式を教えて頂けますか?

下記のD列(D2~D4)セルを求める(入力)する式を教えてください。
B2~B4セルの手数料負担が「当方」の場合はA列「請求額」にC列「手数料」を合計し、D列「振込額」を求め、
B列の手数料負担が「先方」の場合は、A列「請求額」にC列「手数料」を減算し、D列セルの「振込額」を求める式を教えてください。

A1 請求額     B1 手数料負担  C1 手数料    D1 振込額  
A2  3,500円   B2  当方    C2  165(円)  D2 =式??  (3,665円)
A3  164,160   B3   先方    C3  258     D4 =式?? (163,902円)
A4  11,314   B4  先方    C4 165      D4 =式??  (11,149円)

Aベストアンサー

D2に
=IF(B2="当方",A2+C2,IF(B2="先方",A2-C2,""))

手数料負担が当方と先方の2種類しかなければ、
=IF(B2="当方",A2+C2,A2-C2)

Qエクセル 高度な条件付書式設定のしかた

B~D列に3人の休暇予定が、人、休む日のセルに ● でチェックされています。
F列に、仕事のローテーション順の名前を入れます。

添付画像のように、2017/4/2のローテーションに「Bさん」を選択してしまった場合
その日Bさんは、休みなので、入れてはいけない事がわかるように、セルの色を変えたい
条件付書式設定のしかた(数式)はどうすればよいでしょうか?
=iif(HLOOKUP(F6,$B$4:$D$9,3,FALSE)<>"","●")="●"みたいな式を立ててみたのですが
色の変化ありませんでした。

何か良い手はありませんでしょうか?

Aベストアンサー

考えているうちに、先にtom04さんの回答がありました。

="●"=INDEX($B$5:$D$9,ROW()-4,MATCH(F4,$B$4:$D$4,0))
を条件付き書式の条件に入れてみてください。

Qセルの保護と解除について

いつもお世話になっております。

セルの保護と解除を関数でできればいいのですが、
思い当たる方法が見つかりません。
関数でなくともVBA等でできる方法がありましたら
どなたかご教授をお願いいたします。

【イメージ】
  A   B  C E
1コード No 販売額  仕入額
2 10   1 10,000  7,500
3 20   2 2,500  ---
4 3
5 4
C列に費用という文字を含んだ場合に、E列の仕入単価を
セルロックし入力不可とし、セル内をグレーアウトして、
視角からも分かるようにしたいのです。
また、費用以外の文字はE列を入力可・グレーアウトを戻す
ように考えています。
 
よろしくお願いいたします。

イメージ画像を添付させていただきます。

Aベストアンサー

こんにちは。

私の場合は、費用(つまり送料など)に仕入原価は入れないと口頭で済ませればよかったのですが……。
仕入項目の中に書き入れてしまう人間がいるから、そうするのでしょうね。

言葉通りには設定をすると大変面倒なことになりますから、ロックに似た方法で、二重の設定をしたらよいと思います。

シートタブを右クリックして、コードの表示で、以下を貼り付けます。

'//シートモジュール
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then
For Each c In Range("C2", Cells(Columns.Count, 3).End(xlUp))
 If InStr(c.Value, "費用") > 0 Then  'C列に入力された場合
   c.Offset(, 2).ClearContents
   c.Offset(, 2).Interior.Color = RGB(217, 217, 217)
 Else
   c.Offset(, 2).Interior.Color = xlColorIndexNone
 End If
Next
ElseIf Target.Column = 5 And Target.Count = 1 Then 'E列に入力された場合
 If InStr(Target.Offset(, -2).Value, "費用") = 0 Then
  Target.Interior.Color = xlColorIndexNone
 End If
End If
End Sub


そして、
ワークシート上での設定は、
E2から下方に適当に入力範囲を選択しておいて、
データ-データの入力規則(タブ)
設定で、

ユーザー設定
=ISERROR(FIND("費用",C2))

エラーメッセージ
スタイル:停止
タイトル:入力禁止
エラーメッセージ:数値は入れられません。

これは、ほんの一例です。

こんにちは。

私の場合は、費用(つまり送料など)に仕入原価は入れないと口頭で済ませればよかったのですが……。
仕入項目の中に書き入れてしまう人間がいるから、そうするのでしょうね。

言葉通りには設定をすると大変面倒なことになりますから、ロックに似た方法で、二重の設定をしたらよいと思います。

シートタブを右クリックして、コードの表示で、以下を貼り付けます。

'//シートモジュール
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then
For Each c In Range("C2", C...続きを読む


人気Q&Aランキング

おすすめ情報