
A 回答 (15件中1~10件)
- 最新から表示
- 回答順に表示
No.15
- 回答日時:
No.4です。
お礼を読んで。
>できました。
>コードを間違えていました。
どうにか動いてくれたようで良かったです。
一応
>A科目のB列に計がある時
⇒1つの内訳表の中に計は1つであり、表間のにも計は存在しない。
>A種目のC列に数値1がある行
⇒C列の数式を入れたい行以外に1は存在しない。
が守られていれば、双方のシートで他の列や行(A科目のB列含む)にイレギュラーな語句が入っても動作すると思います。
と言う前に想定した対応は取ってませんので。
A種目のC列で数式を入れたい行に対し1以外を入れたい場合は、別途対応策は取りますけど、質問は今回の物を一度完了させ改めてにして欲しいかな。
その時は以前の質問サイトのリンクを貼って頂ければと。
No.14
- 回答日時:
前回のは破棄してください。
「種目別内訳」を探し、次に「名 称」を探し、次の行から計を設定するようにしました。
---------------------------------------------
Option Explicit
Public Sub 科目計設定()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim dicT As Object
Dim row1 As Long
Dim row2 As Long
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim key As String
Dim kctr As Long '科目の計のカウンター
Dim sctr As Long '種目のカウンター
Dim mode As Long
Dim val As String
Dim start_row As Long
Dim RE As Object
Set RE = CreateObject("VBScript.RegExp")
RE.Pattern = "^(\s| )*名(\s| )*称(\s| )*$"
Set sh1 = Worksheets("A種目")
Set sh2 = Worksheets("A科目")
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
maxrow2 = sh2.Cells(Rows.Count, "B").End(xlUp).row 'B列の最大行取得
'科目の計の次の行を全て記憶する
kctr = 0
For row2 = 5 To maxrow2
If sh2.Cells(row2, "B").Value = "計" Then
kctr = kctr + 1
dicT(kctr) = row2 + 1
End If
Next
maxrow1 = sh1.Cells(Rows.Count, "B").End(xlUp).row 'B列の最大行取得
'種目に計を設定する
mode = 0
For row1 = 1 To maxrow1
val = sh1.Cells(row1, "B").Value
Select Case mode
Case 0
'種目別内訳 待ち
If val = "種目別内訳" Then
mode = 1
GoTo NEXT_ROW
End If
Case 1
'名称待ち
If RE.test(val) Then
mode = 2
start_row = row1 + 1
GoTo NEXT_ROW
End If
Case 2
'計 処理中
If val = "種目別内訳" Then
mode = 1
GoTo NEXT_ROW
End If
If (row1 - start_row) Mod 3 <> 0 Then
GoTo NEXT_ROW
End If
If val = "" Or val = "小計" Or val = "計" Then
GoTo NEXT_ROW
End If
sctr = sctr + 1
key = val & " " & sh1.Cells(row1 + 1, "B").Value
If dicT.exists(sctr) = False Then
sh1.Activate
sh1.Cells(row1, "B").Select
MsgBox ("[" & key & "]は別紙明細に存在しません")
Exit Sub
End If
sh1.Cells(row1 + 1, "E").Formula = "=A科目!" & sh2.Cells(dicT(sctr), "E").Address(False, False)
End Select
NEXT_ROW:
Next
If sctr <> kctr Then
MsgBox ("科目の件数=" & kctr & " 種目の件数=" & sctr & "が違いますが設定完了しました")
Else
MsgBox (sctr & "件設定完了")
End If
End Sub
No.13
- 回答日時:
画像の提示ありがとうございました。
2ページ目の種目別内訳(51行目)と
3ページ目の種目別内訳(100行目)とでは、行のパターンが異なります。
2ページ目の種目別内訳(51行目)の1行前に余分な空白行がありますが、
3ページ目の種目別内訳(100行目)の1行前に余分な空白行がありません。
今までの前提では、5,8,11のように2行飛ばしで読んでいけばよかったのですが、
この状態では、合計対象となる、○○、◆◆の行の位置を特定するための方法が、
簡単に決められません。
現在、どのようにして特定するか考慮中ですが、簡単な方法が思いつきません。
時間がかかるかも知れませんが、しばらくお待ちください。
No.12
- 回答日時:
No.10です。
>ご迷惑おかけしてすみません。
他の方の尻拭い(引継ぎ?)では仕方ないですよ。
私の方は既に回答した内容で締めてますのであとはお任せですから。
ただWordの様にページの切り替えってのはExcelには無関係に思えます。
ページが切り替わることで『計』の個数に変化が起きる訳ではないのでしょ?
間に無関係な行が幾つあろうとも、それらの『計』が1つの内訳に1つであるのなら。
正直言えば印刷形式にする前にデータ保存用の
『1種目内訳に対し1レコード』のデータベースっぽい管理表を作っておいた方が書式形式を色々作成したい場合の母体となり、扱いやすかったのではないかなって感じもします。
そこはデータを継続保管するならとかの業務内容次第にはなると思いますので、あくまでジジィの戯言としておいてください。
No.11
- 回答日時:
>種目表のカテゴリーがかわる時に計で一旦しめるのですが
>行数が多いと同じ形態の表がつぎのページにあり。そこに小計や計がきます
>その後、新たな同形態のページから項目がはじまります
>その時にうまく判断してくれなくて小計三行の上段に=科目##が入ってし>まいます
>そしてその下のページまで読み取ってくれません
提示したマクロは、種目表の5,6,7行の3つ行が、延々と繰り返している前提です。もし、それが、くずれるなら、
1ページ目の種目表の5行目に該当する部分が、ページの切り替わりで、次のページのどの位置になるのかが、わかりません。
1ページ目と2ページ目のページの切り替わりの部分の画像を提示していただけませんでしょうか。
No.10
- 回答日時:
No.7です。
結局エラーの内容や数式の書き間違えの有無などの有力情報は放置ですか?
このサイトを利用する云々もですが、それぞれの質問でその前の質問が解決したにも関わらず類似した質問を繰り返すってなら、前の質問に対する回答の何が問題になったのかが『報連相』ではないかなと思います。
まだここは優しいですけど他だと前回の質問・解決したとされる回答についてから追及されるかもですよ。
>A種目のC列に数値1がある行
についても『3行1組』の2行目って事ですが1行目や3行目には存在しないのか?と言う疑問もありますが、それでもコードのあの部分でエラーは起きないですしね。
それぞれの個数の確認であればCOUNTIFで始めに調べれば良いだけかもですし。
仮に1行目や3行目に存在するとしたら書き込まれている行番号を調べれば回避は可能でしょう。
★シートの保護でもかかっていたのだろうか??????★
すみません。
情報量が多くて順次処理していきますので、お待ちください。
私自身もこの表を自分で作成したわけではなくて、この統一性がない表の属性を見極めるのに時間を要しているところです。
三行一組なので各項目に対して1式とあります。D列の各中段以外には何もはいりません。
シートの保護はかかっていなかったです。
全角かどうかのチェックは行いました。
今、コードミスがないか、映し間違えがないかなど、探っています。
ご迷惑おかけしてすみません。
No.9
- 回答日時:
>実際、半角スペースがどこに何個入っているのかはランダム過ぎて困っています。
No8です。空白がどうなっているかの質問は、科目の計と種目の計がバラバラに並んでいる場合、それを名前で突き合わせるために質問しました。
科目と種目の並びが保障されているということなので、
名前の突き合わせは、不要になりました。
従って、空白がどのようになっているかを気にする必要はなくなりました。
No8のマクロでは、名前の突き合わせは行っていません。
但し、科目の計と種目の計の件数が不一致の場合は、エラーメッセージ(もしくは警告メッセージ)をだすようにしています。
No.8
- 回答日時:
以下のマクロを標準モジュールに設定してください。
Option Explicit
Public Sub 科目計設定()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim dicT As Object
Dim row1 As Long
Dim row2 As Long
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim key As String
Dim kctr As Long '科目の計のカウンター
Dim sctr As Long '種目のカウンター
Set sh1 = Worksheets("A種目")
Set sh2 = Worksheets("A科目")
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
maxrow2 = sh2.Cells(Rows.Count, "B").End(xlUp).row 'B列の最大行取得
'科目の計の次の行を全て記憶する
kctr = 0
For row2 = 5 To maxrow2
If sh2.Cells(row2, "B").Value = "計" Then
kctr = kctr + 1
dicT(kctr) = row2 + 1
End If
Next
maxrow1 = sh1.Cells(Rows.Count, "B").End(xlUp).row 'B列の最大行取得
'種目に計を設定する
For row1 = 5 To maxrow1 Step 3
If sh1.Cells(row1, "B").Value <> "" And sh1.Cells(row1, "B").Value <> "小計" Then
sctr = sctr + 1
key = sh1.Cells(row1, "B").Value & " " & sh1.Cells(row1 + 1, "B").Value
If dicT.exists(sctr) = False Then
sh1.Activate
sh1.Cells(row1, "B").Select
MsgBox ("[" & key & "]は別紙明細に存在しません")
Exit Sub
End If
sh1.Cells(row1 + 1, "E").Formula = "=A科目!" & sh2.Cells(dicT(sctr), "E").Address(False, False)
End If
Next
If sctr <> kctr Then
MsgBox ("科目の件数=" & kctr & " 種目の件数=" & sctr & "が違いますが設定完了しました")
Else
MsgBox (sctr & "件設定完了")
End If
End Sub
No.7
- 回答日時:
基本的には。
>A科目のB列に計がある時
⇒その1行下のE列の行番号を順次格納
>A種目のC列に数値1がある行
⇒格納していた順に同行のE列に置換した数式を順にセットする
と言う事以外は何もしてません。
ベテラン様のように『他の語句がどのように存在しているからどうなるのか?』と言う考えは持たず上記の判断のみで実行したものです。
数式の元の文字列を書き違えていないと言うのなら、基本的にはエラーは出ないはずですよ。
ベテラン様もいらっしゃったようですので、あとはお任せ致します。
コードは破棄しても構いませんので。
多分データ数が多くてフィルターをかけられないのかも知れませんし。
⇒こちらでは簡易的に2万行ほどでも出来ましたけど、列数が少なかったため書き込まれているデータ数(使用しているセル数)の差が影響しているのかも。
なのでベテラン様のように地道に調べていくのが確実かもですね。
でも質問の度に書式が変わるとは、未だ書式が定まらないのか既に完成しているけど小出しで質問を変えていっているのか気にはなります。
そのBookを前にコードを書けばベテラン様なら30分もかからず終わると思いますよ。
小出しで情報を増やすのは逆に手間になります。
解決したと思って検証用Bookを破棄したらまた質問が上がった事で再度Bookを作成するのはね。
たまたま消し忘れてたBookに追加質問が1年後に来た時は凄い偶然と思った事はありました。
ありがとうございます。
すみません、ここで質問をするのがごく最近になってからだったので、勝手があまりわかっていませんでした。
以後、問題があればまとめて質問できるようならそうさせて頂きます。
No.6
- 回答日時:
No5です。
補足要求 2.ですが、
「第三区画 棚X」の間の空白の質問ですが、他のものついても同様です。
「第三区画 棚Y」
「第七区画 棚Z」
等の空白について質問しています。
(「第三区画 棚X」のみに限定して、質問しているわけではありません)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Excel(エクセル) Excel_マクロ_複数のシートのVLOOKUPで表示された#N/A以外に色付けをしたいです 1 2023/02/16 22:37
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Visual Basic(VBA) VBA 最終行まで数式をコピーする 3 2023/01/03 15:44
- Excel(エクセル) excelの数式の書き方について。 以下のような数式をSheet1に書いています。 Sheet1のB 1 2022/09/28 18:43
- その他(Microsoft Office) Excel 2列の値を返す数式についてです 1 2022/11/23 22:59
- Visual Basic(VBA) ExcelのVBAを使い、複数シートの同一箇所を、同一条件にて一括でソルバーを回す方法について 1 2022/04/23 11:49
- Excel(エクセル) Countifよりも早く重複数をカウントする方法ありますか? 18 2022/07/04 13:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
A列にある値をB列・C列にVBAで...
-
EXCEL VBAで教えてください。
-
【VBA】2つのシートの値を比較...
-
ERROR 型が一致しませんと...
-
複数の列の値を結合して別の列...
-
VBAでのリスト不一致抽出について
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
エクセルのVBAでタブ区切り...
-
マクロでシートからシートへの...
-
Cellsのかっこの中はどっちが行...
-
VBA 2つの条件が一致すれば...
-
VBAによる列削除について教えて...
-
VBでEXCELシートを読み込んだと...
-
excel vba で●を数える
-
VBA初心者です。 並べ替え Sort...
-
VBAを用いて条件付きの平均値、...
-
重複したデーターの転記につい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
Worksheets メソッドは失敗しま...
-
B列の最終行までA列をオート...
-
Cellsのかっこの中はどっちが行...
-
IIF関数の使い方
-
Changeイベントでの複数セルの...
-
【VBA】2つのシートの値を比較...
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
VBAのFind関数で結合セルを検索...
-
DataGridViewに空白がある場合...
-
VBAを使って検索したセルをコピ...
-
文字列の結合を空白行まで実行
-
データグリッドビューの一番最...
-
VBAでのリスト不一致抽出について
-
エクセル 2つの表の並べ替え
-
rowsとcolsの意味
-
【Excel VBA】 B列に特定の文字...
-
VBA 列が空白なら別のマクロへ...
おすすめ情報
https://gyazo.com/ba552b516ec77045669875940e65da8d
https://gyazo.com/fdbc3fb1557c7b6ac0eed7ee038b97bd
画像添付しました。
>A科目のB列に計がある時
>A種目のC列に数値1がある行
対になる同じ数量だけあります。
表で種目別のセルE6に数式=A科目!E48がはいります。
種目・科目 共に間に小計などもでてきますが、【計】の数と【1式】は同じ数だけ必ずあります。
そして、上から順番に対になっています。
補足です。
1.
A種目の
第三区画
棚X
第三区画
棚Y
第三区画
棚Z
第七区画
棚Z
の順に
科目の方も上から同じ順番で計が並んでいます。
この順番はかわりません。
2.
基本的には半角スペースが二つ入っています。
しかし、これはあくまでもこのケースなので、別の違うカテゴリーになると、第○○区画だけになったり在庫棚とかだけの表記になります。第〇区画 棚□のグループ分けだけでは無いのですよ・・・
3.
予備区画などの一単語にはスペースははいりません。
4.
B3はセル結合していません。線がないだけで、単一セルになっています。
※絶対に揺るがな法則は種目の順番に科目の計が並んでいることですね。
ややこしくてすみません。
補足です
あらたに発見したのですが
科目に第三区画 棚X とありますが
このパターンの他に、一単語(予備区画)などのほかに
販売物第五区画 棚J
郵送物第一区画 棚8
などの場合もでてきます。
そして種目には
これがわけて表記されています。
二行で
販売物□□□
第五区画□□棚J
□は半角スペースです。
実際、半角スペースがどこに何個入っているのかはランダム過ぎて困っています。
一点だけ補足ぬけがありました
種目表のカテゴリーがかわる時に計で一旦しめるのですが
行数が多いと同じ形態の表がつぎのページにあり。そこに小計や計がきます
その後、新たな同形態のページから項目がはじまります
その時にうまく判断してくれなくて小計三行の上段に=科目##が入ってしまいます
そしてその下のページまで読み取ってくれません
続きです
種目のページがかわる例
---------------------------------------1ペー
種目別内訳
名称
○○ 1式 =科目##
小計 □□円
○○ 1式 =科目##
----------------------------------------2ペー
種目別内訳
名称
上段 =科目## ←これがくる
小計 □□円
計 □□□□円
[
[
[
[
[
----------------------------------------3ペー
種目別内訳
[
名称
○○ 1式 ←ここまでこない
○○ 1式
計 □□円
https://gyazo.com/41b5db6ea707502cf106c9c5cca615a4
雑ですがページはこのような感じです。