A列には      B列には
2007/10/1     5
2007/10/2     3
2007/10/3     4
2007/10/4     6
2007/10/5     5




A列は昇順に日付が入っていて
B列にはランダムに数字が入っています。


やりたいことは
たとえばB1セルの「5」を基準値として
次に「5」がくるのは何日後かを知りたいです。

4日後になると思うのですが
どうやったら4と数字を求めるられるのでしょうか?
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

「次の」が必要なら、関数では処理できません。

検索コマンドを使用してVBAでプログラムを組んでください。
あと、単純な方法としては、C列の1行目に「=if(B1=5,"○","×")」と入力して各行にコピーすれば、B列が5の日は目視ですぐに探せるでしょう。計算式の「5」を変数にすれば5以外の数値のところもすぐ探せます。
    • good
    • 0
この回答へのお礼

なるほど!
大変参考になりました。ご回答ありがとうございます。

お礼日時:2007/10/17 19:49

=INDEX(A2:A$1000,MATCH(B1,B2:B$1000,0))-A1

    • good
    • 0
この回答へのお礼

大変参考になりました。ご回答ありがとうございます。

お礼日時:2007/10/20 10:22

何行後に出てくるか=何日後に出てくるか、と考えて


ユーザー関数を作ってみました。
Function fnd(a, b)
r = a.Row
c = a.Column
s = Columns(c).Find(what:=b, after:=a, searchorder:=xlByColumns).Row
fnd = s - r
End Function
例データB列
5
4
2
6
2
3
5
2
6
7
8
5
6
1
2
3
4
5
C1に =fnd(B1,5)  で6
C2に =fnd(B7,5)  で5
C3に =fnd(B12,5)  で6
しかし第1引数をいつも上例で5の行を指定しなければならず
使い物にならないかも。

いっそのこと、VBAで5の行を全てリストアップして、行番号を出すとか、差を出すのが良いのかもしれない。
ーー
あるいはその行のB列の値は次ぎは何行目に出るかを上記関数で出す。
これなら式の複写が使える。
B1に =fnd(B1,B1)
と入れて式を下方向に複写。
結果
6
15
2
5
3
10
以下略
    • good
    • 0
この回答へのお礼

すいません。

難しすぎてよくわからないです。。。
もっと勉強してから出直してきます。
ご回答ありがとうございます。

お礼日時:2007/10/17 19:52

「日付は連続している」という条件ならば、日数計算と言うより次に出てくる行数を調べれば良い事になりますが如何でしょう?



例えば、A列、B列ともにタイトル行を含まないリストであるとした場合、セル C1 に

=MATCH(B1,INDIRECT("B"&ROW()+1&":B"&MATCH(MAX(A:A),A:A,0)),0)

としてセル C3 までコピーした場合、下記のように出ましたよ。

2007/10/1  5  4
2007/10/2  3  2
2007/10/3  4  3
2007/10/4  3
2007/10/5  5
2007/10/6  4
    • good
    • 0
この回答へのお礼

すいません。土日は日付ないデータなのです。
ご回答ありがとうございます。

お礼日時:2007/10/17 19:50

C列に =INDEX(A2:A$9999,MATCH(B1,B2:B$99,0),1)


と入れて 書式を 日時にして 下にコピーします
    • good
    • 0
この回答へのお礼

試してみたら出来ました。

大変参考になりました。ご回答ありがとうございます。

お礼日時:2007/10/17 19:46

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

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

QExcel2013 VBA A列とB列の文字をA列とB列とC列に移動させる方法

A列とB列に文字が入っているのですが、下記のようにA列とB列とC列に文字を移動させたいです。
(A列の数字は必ず奇数のA列に入っています。)
VBAのコードを教えて下さい。

例えば
A1 1  B1 cat
A2 空白 B2 猫
A3 空白 B3 dog
A4 空白 B4 犬
A5 2  B5 whale
A6 空白 B6 クジラ
A7 3  B7 rabbit
A8 空白 B8 ウサギ

とデータがある場合

A1 1  B1 cat  C1 猫
A2 空白 B2 dog  C2 犬
A3 2  B3 whale  C3 クジラ
A4 3  B4 rabbit C4 ウサギ

としたいです。

実際、データは、A5196まであります。

Aベストアンサー

No.1です。

>実際、データは、A5196まであります。

前回のコードは一つずつカット&ペーストしていますので
かなりの時間を要すると思います。
↓のコードに変更してみてください。

Sub Sample2()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
Application.ScreenUpdating = False
With Range(Cells(1, "C"), Cells(lastRow, "C"))
.Formula = "=IF(MOD(ROW(),2)=1,B2,"""")"
.Value = .Value
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub

少しは短縮できると思います。m(_ _)m

No.1です。

>実際、データは、A5196まであります。

前回のコードは一つずつカット&ペーストしていますので
かなりの時間を要すると思います。
↓のコードに変更してみてください。

Sub Sample2()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
Application.ScreenUpdating = False
With Range(Cells(1, "C"), Cells(lastRow, "C"))
.Formula = "=IF(MOD(ROW(),2)=1,B2,"""")"
.Value = .Value
.SpecialCells(xlCellTypeB...続きを読む

QA列とB列の重複を抽出したいのですがA列とB列の値は一部だけ同じ文字です。ご教示お願いします。

エクセル初心者です。重複を見つけるのが仕事です。いろいろやってみたのですがうまくできません。
お知恵をお貸しください。

A列には企業名が入力されています。
B列にも企業名が入力されていますが全く同じ文字ではないのです。

たとえばこういうことです。
A1 (有)雪見酒      B1  雪見
A2 株式会社豪雪地帯   B2 (株)豪雪地帯
A3 ゆきかき本舗     B3 (有)ゆきかき本舗

A列にある企業名とB列にある企業名が同じであればセルを塗りつぶすか○を表示させるように
したいのです。
重複を見つけるのが目的なので、ほかの方法でもかまいません。
すみません、A列のセルとB列のセルが全く同じ名前ならば重複が見つけられたのですが
ここから先がどうしてもわからないのです。。。
申し訳ありませんがどうか教えてください。。。

Aベストアンサー

No4です。以下のマクロを標準モジュールへ登録してください。
--------------------------------------------------
Option Explicit
Public Sub 重複チェック()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim nameT1() As String
Dim nameT2() As String
Dim t1, t2 As Variant
t1 = Time
maxrow1 = Cells(Rows.Count, "A").End(xlUp).row '最大行取得
maxrow2 = Cells(Rows.Count, "B").End(xlUp).row '最大行取得
ReDim nameT1(maxrow1)
ReDim nameT2(maxrow2)
Range("C1:" & "D" & maxrow2).Value = ""
Call makeTable(nameT1, "A", maxrow1)
Call makeTable(nameT2, "B", maxrow2)
For row1 = 1 To maxrow1
For row2 = 1 To maxrow2
If Cells(row2, "C") = "" Then
If Mymatch(nameT1(row1), nameT2(row2)) = True Then
Cells(row2, "C").Value = "○"
Cells(row2, "D").Value = row1
End If
End If
Next
Next
t2 = Time
MsgBox ("チェック完了 処理時間=" & Minute(t2 - t1) & "分" & Second(t2 - t1) & "秒")
End Sub
'余分な文字を削除した結果をテーブルに格納する
Private Sub makeTable(ByRef nameT() As String, ByVal col As String, ByVal maxrow As Long)
Dim row As Long
Dim ary As Variant
Dim name As String
Dim i As Long
ary = Array("㈱", "(株)", "株式", "(有)", "有限", "会社")
For row = 1 To maxrow
name = Cells(row, col).Value
For i = 0 To UBound(ary)
name = Replace(name, ary(i), "")
Next
nameT(row) = name
Next
End Sub
'企業名が一致かどうか判定する
Private Function Mymatch(ByVal name1 As String, ByVal name2 As String) As Boolean
Mymatch = False
Dim pos As Variant
pos = InStr(1, name1, name2, vbTextCompare)
If pos > 0 Then Mymatch = True
End Function
-----------------------------------------------------
一致の精度が悪ければその旨補足してください。
(一致すべきものが一致しない、一致してはいけないものが一致している)
100%解決できる保証はありませんが、多少のチューニングは行います。

No4です。以下のマクロを標準モジュールへ登録してください。
--------------------------------------------------
Option Explicit
Public Sub 重複チェック()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim nameT1() As String
Dim nameT2() As String
Dim t1, t2 As Variant
t1 = Time
maxrow1 = Cells(Rows.Count, "A").End(xlUp).row '最大行取得
maxrow2 = Cells(Rows.Count, "B").End(xlUp).row '最大行取得
ReDim ...続きを読む

Q例えば、AさんからGさんまでがA列に縦に並んでいてB列に数字が入っています。B列にある数字の合計をA

例えば、AさんからGさんまでがA列に縦に並んでいてB列に数字が入っています。B列にある数字の合計をA-Gさん別々に出したいんですが簡単なvbaの記述方法はないでしょうか?
お願いします。

Aベストアンサー

こんばんは!

A列のA~Gさんは複数存在しているのでしょうか?
そうであればSUMIF関数で対応できると思いますが、VBAをお望みだというコトですので
一例です。

元データはSheet1にあり、Sheet2に表示するとします。
尚、Sheet1の1行目は項目行でデータは2行目以降にあるという前提です。
標準モジュールにしてください。

Sub Sample1()
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.ClearContents
With Worksheets("Sheet1")
.Range("A:A").AdvancedFilter Action:=xlFilterCopy, copytorange:=wS.Range("A1"), unique:=True
lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row
With Range(wS.Cells(2, "B"), wS.Cells(lastRow, "B"))
.Formula = "=SUMIF(Sheet1!A:A,A2,Sheet1!B:B)"
.Value = .Value
End With
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m

こんばんは!

A列のA~Gさんは複数存在しているのでしょうか?
そうであればSUMIF関数で対応できると思いますが、VBAをお望みだというコトですので
一例です。

元データはSheet1にあり、Sheet2に表示するとします。
尚、Sheet1の1行目は項目行でデータは2行目以降にあるという前提です。
標準モジュールにしてください。

Sub Sample1()
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.ClearContents
With Worksheets("Sheet1")
.Range("A:A...続きを読む

QB列にA列の数字をかけた数字を出したい

B列の各行に3(or2or1)を入力をしたらA列の数字に0.3(2なら0.2,1なら0.1)
をかけて小数点第一以下は切り捨てをするマクロを組みたいのですができません。

例  A5に4581と入力されていてB5に3と入力をしたらB5が1374と変換される

ようにしたいです;どのようなマクロを組めばよいでしょうか。。。
環境はWINDOWSVISTAのEXCEL2007ですm(__)m

Aベストアンサー

>B列の各行に3(or2or1)を入力をしたらA列の数字に…

シート名タブを右クリックしてコードの表示を選ぶ
現れたシートに下記をコピー貼り付ける

private sub Worksheet_Change(byval Target as excel.range)
 dim h as range
 on error resume next
 for each h in application.intersect(target, range("B:B"))
  if h.value = 1 or h.value = 2 or h.value = 3 then
   application.enableevents = false
   cells(h.row, "A") = application.rounddown(cells(h.row, "A") * h * 0.1, 0)
   application.enableevents = true
  end if
 next
end sub

ファイルメニューから終了してエクセルに戻る
A列に数字を準備し、B列に1か2か3を記入する。

>B列の各行に3(or2or1)を入力をしたらA列の数字に…

シート名タブを右クリックしてコードの表示を選ぶ
現れたシートに下記をコピー貼り付ける

private sub Worksheet_Change(byval Target as excel.range)
 dim h as range
 on error resume next
 for each h in application.intersect(target, range("B:B"))
  if h.value = 1 or h.value = 2 or h.value = 3 then
   application.enableevents = false
   cells(h.row, "A") = application.rounddown(cells(h.row, "A") * h * 0.1, 0)
   appli...続きを読む

Q(初心者です)VBAでA列がBかつC列がDならE列がF

VBAでA列がBかつC列がDならE列がFという風なマクロを書きたいです。

Sub tesuto()


If Columns("A").Value = "B" And Columns("C").Value = "D" Then
Columns("E") = F
End If

End Sub

などめちゃくちゃにしか分かりません。
勉強もろくにしていない初心者の不躾な質問で申し訳ありませんが、教えていただけますとうれしいです。

Aベストアンサー

こんにちは!

ループさせるのが一番オーソドックスだと思います。
一例です。

Sub Sample1()
Dim i As Long
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
If Cells(i, "A") = "B" And Cells(i, "C") = "D" Then
Cells(i, "F") = "E"
End If
Next i
End Sub

※ 1行目~A列最終行までループさせています。m(_ _)m

Q【EXCEL】条件付き書式、A列、C列、D列、E列が同じ値の時にB列の背景色を変えたい

お世話になります。

エクセルの条件付き書式の数式の使い方について教えて下さい。
A列、C列、D列、E列の値が同じ時にB列のセルの背景を青に
塗りつぶしたいと思っています。

なので、「数式を使用して、書式設定するセルを決定」、
「次の数式を満たす場合に値を書式設定」で、数式を
「=A1=C1=D1=E1」と入力し、書式、塗りつぶし、青、
を選択して、条件付き書式を設定しました。
すると、、、画像のような結果になります。

私の感覚だと画像でセルの値が「11」~「15」の時だけ
B列が青になると思うのですが実際の結果は画像の通りです。

先の話の通りA列、C列、D列、E列の値が同じ時だけ
B列のセルの背景を青にしたい場合はどうい数式になるのでしょうか?

すいませんが、詳しい方、数式(関数?)で説明できる方よろしくお願い致します。

追記
可能でしたらA列、C列、D列、E列が空白の時はB列の背景色をなしにしたいと思っております。
→A列、C列、D列、E列に値があって、かつ同じ値の場合のみB列の背景を青にしたいです。

お世話になります。

エクセルの条件付き書式の数式の使い方について教えて下さい。
A列、C列、D列、E列の値が同じ時にB列のセルの背景を青に
塗りつぶしたいと思っています。

なので、「数式を使用して、書式設定するセルを決定」、
「次の数式を満たす場合に値を書式設定」で、数式を
「=A1=C1=D1=E1」と入力し、書式、塗りつぶし、青、
を選択して、条件付き書式を設定しました。
すると、、、画像のような結果になります。

私の感覚だと画像でセルの値が「11」~「15」の時だけ
B列が青にな...続きを読む

Aベストアンサー

AND関数を使えば判定ができるのでは?
 =AND(A2<>"",A2=C2,C2=D2,D2=E2)

A列には常に判定する数値が入っているなら「A2<>""」は不要です。

参考サイト
http://www.relief.jp/itnote/archives/003940.php

QExcelを分割 A列には日付、A列以外には営業担当者や商品や金額などが入力された列があります。 営

Excelを分割

A列には日付、A列以外には営業担当者や商品や金額などが入力された列があります。

営業担当者毎に、ファイルを分割するマクロをおしえてください。10人いれば、10ファイルできることになります。

営業担当者が入力されている列が資料により、異なるので、C列に営業担当者が入っている場合は、それをセルとかに入力して指定できる様にしたいです。

また、ファイルの出力先も指定できる様にしたいです。

よろしくお願いします。

Aベストアンサー

No.2 mike_gさんの質問ですが、回答者側から言わせてもらうと非常に重要なことです。
何故なら、質問者のレベルに合わせて回答しないと何の役にも立たないからです。
今回は、マクロの知識があると云うことなので、その前提で回答させていただきました。
こんな感じです。

Sub sample()
Set ws = ActiveSheet
ce = Range("営業担当者セル").Value
fp = Range("出力先").Value
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To Cells(Rows.Count, ce).End(xlUp).Row
Set d.Item(Cells(i, ce).Value) = Cells(i, ce)
Next i
For Each i In d.keys
ws.Copy
Columns(ce).ColumnDifferences(d.Item(i)).EntireRow.Delete
ActiveWorkbook.SaveAs Filename:=fp & "\" & i & ".xlsx"
ActiveWorkbook.Close
Next i
End Sub

No.2 mike_gさんの質問ですが、回答者側から言わせてもらうと非常に重要なことです。
何故なら、質問者のレベルに合わせて回答しないと何の役にも立たないからです。
今回は、マクロの知識があると云うことなので、その前提で回答させていただきました。
こんな感じです。

Sub sample()
Set ws = ActiveSheet
ce = Range("営業担当者セル").Value
fp = Range("出力先").Value
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To Cells(Rows.Count, ce).End(xlUp).Row
Set d...続きを読む

QExcel2007 マクロ A列のある値を検索し、B列にその値に対応した数値を自動で入れる

Excel2007について教えてください。
A列のある値を検索し、B列にその値に対応した数値を自動で入れることはできますでしょうか?

例えば、A列の「○○」、「××」、「△△」があれば、「○○」、「××」、「△△」のそれぞれの行のB列に「100」、「200」、「300」を入れる等です。

宜しくお願いします。

Aベストアンサー

こんにちは!

>にその値に対応した数値を・・・
の部分は、質問文を素直にそのままコードにしてみました。

Sub Sample1()
Dim c As Range, k As Long, myAry As Variant
myAry = Array("○○", "××", "△△")
For k = 0 To UBound(myAry)
Set c = Range("A:A").Find(what:=myAry(k), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
c.Offset(, 1) = 100 * (k + 1)
End If
Next k
End Sub

こんな感じではどうでしょうか?m(_ _)m

QExcel2007 マクロ A列のある値を検索し、B列にその値に対応した数値を自動で入れる

Excel2007について教えてください。
A列のある値を検索し、B列にその値に対応した数値を自動で入れることはできますでしょうか?

画像のA列のみ記入したシートに、自動でA列に対応した数値をB列に入れるようにしたいです。
画像の場合、「○○」→100、「△△」→200、「××」→250

宜しくお願いします。

Aベストアンサー

前回の方のコードをそのまま利用させていただきました。
 myAry = Array("◯◯", "××", "△△")
 myAry2 = Array(100, 250, 200)
このように、順序をあわせます。

もう一つは、数式を利用したものです。

'//
Sub Sample2()
'No. 9031611+a
 Dim c As Range, i As Long
 Dim myAry As Variant, myAry2 As Variant
 Dim FirstAddress As String
 myAry = Array("◯◯", "××", "△△")
 myAry2 = Array(100, 250, 200)
 For i = 0 To UBound(myAry)
  Set c = Range("A:A").Find(What:=myAry(i), _
      LookIn:=xlValues, _
      lookat:=xlWhole)
  If Not c Is Nothing Then
   FirstAddress = c.Address
   Do
   c.Offset(, 1) = myAry2(i)
   Set c = Range("A:A").FindNext(c)
   Loop Until FirstAddress = c.Address
  End If
 Next i
End Sub

'//(予めインデックスのシートが必要です)
Sub Sample3()
Dim Rng As Range
Set Rng = Range("E1:F3")
Range("A1").Select
With Range("A1", Cells(Rows.Count, 1).End(xlUp))
 .Offset(, 1).FormulaLocal = _
 "=VLOOKUP(A1," & Rng.Address & ",2,0)"
 .Offset(, 1).Value = .Offset(, 1).Value
End With
End Sub

'///

前回の方のコードをそのまま利用させていただきました。
 myAry = Array("◯◯", "××", "△△")
 myAry2 = Array(100, 250, 200)
このように、順序をあわせます。

もう一つは、数式を利用したものです。

'//
Sub Sample2()
'No. 9031611+a
 Dim c As Range, i As Long
 Dim myAry As Variant, myAry2 As Variant
 Dim FirstAddress As String
 myAry = Array("◯◯", "××", "△△")
 myAry2 = Array(100, 250, 200)
 For i = 0 To UBound(myAry)
  Set c = Range("A:A").Find(What:=myAry(i), _
      L...続きを読む

QエクセルでA列にある数字の合計が特定の数値を超えたらB列に合計を表示させるには

エクセルについての質問です。
以下の様なエクセルの表でA列の合計が、「10」を超える場合、B列に合計を表示させるには、B列にはどの様な関数を入れれば良いでしょうか。お教えください。
なお、最終行にも合計を表示です。

A列 B列
5
4 9
3
5 8
1
2
1
2 6

VBAを知らないため、何とか、関数で対応できると、大変、助かります。

よろしくお願いいたします。

右側の数字がB列の数字です。
解りにくくて、すみません。

Aベストアンサー

例示のようにならない。
B2セルに
=IF(OR(A3="",SUM(A$1:A3)-SUM(B$1:B1)>10),SUM(A$1:A2)-SUM(B$1:B1),"")
下へオートフィル

解決したいと思うなら、もう少し具体的な説明お願いします。
画面の取り込みは([Alt]+[)[PrintScreen]キーで、ペイント等で貼り付け、加工してください


人気Q&Aランキング

おすすめ情報