今だけ人気マンガ100円レンタル特集♪

EXCELでランダムに存在する数字を振り分ける方法についてご教示ください。

ランダムに生成された数字が各セルに入力されており、
その数字を「1-25, 26-55,,,」といった数字の範囲毎に自動で振り分ける関数を調べたいです。

添付画像に例を記載しましたので、ご確認ください。

「EXCEL上の数字を自動で振り分ける方法」の質問画像

A 回答 (5件)

数値反意語との個数を数えたいのなら、分析ツールアドインの、ヒストグラム機能を使えば良いと思います。

    • good
    • 2

こんにちは。



mode 関数などは、分類はしてくれますが、その該当する数字は出せません。
それでよかったら、マクロで対応できますが、いかがでしょうか。
(マクロよりも、その画像を読むのに苦労しました(^^;)

'//標準モジュール
Sub DataCategorize()
 Dim Rng As Range
 Dim Cate() As Variant
 Dim arData() As Variant
 Dim k As Long, i As Long, j As Long
 Dim c As Variant, n As Long
 Dim dt, St As Long
 Dim Col As Variant
 '-------------------
 ''分類データ保管
 St = 17 'データの書き出し場所
 Col = "B" 'データ最初の列
 'X2 から分類幅
 Set Rng = Range(Cells(2, "X"), Cells(Rows.Count, "X").End(xlUp))
 '-------------------
 n = Rng.Rows.Count
 ReDim Cate(1 To n)
 For i = 1 To n
  If InStr(Rng(i), "-") = 0 Then
   Cate(i) = Rng(i) & "-" & Rng(i)
  Else
   Cate(i) = Rng(i)
  End If
 Next i
 'データ出力
 For j = 2 To Cells(Rows.Count, 2).End(xlUp).Row Step 2
  ReDim arData(1 To n)
  For Each c In Range(Cells(j, Col), Cells(j, Col).End(xlToRight))
   For i = 1 To n
    dt = Split(Cate(i), "-")
    If c.Value >= Val(dt(0)) And c.Value <= Val(dt(1)) Then
     arData(i) = arData(i) & "," & c.Value
    End If
   Next
  Next
  Call ExportData(arData, Cells(St, Col))
  St = Cells(Rows.Count, Col).End(xlUp).Row + 2 '2=> データ群は、1行開ける
  Erase arData
 Next j
End Sub
Sub ExportData(arData() As Variant, r As Range)
 '引数: 配列, 書き出し場所
 Dim n As Variant
 Dim i As Long, j As Long
 Dim dt
 For i = 1 To UBound(arData)
  If arData(i) <> "" Then
   n = Mid(arData(i), 2) '最初のコンマを取る
   dt = Split(n, ",")
   r.Offset(j).Resize(, UBound(dt) + 1).Value = dt
   j = j + 1
  End If
 Next
End Sub
    • good
    • 0

一つの関数でやる方法は思いつきません。


ただ、作業セルを使うのなら、下図のようなのも参考になるのかな
「EXCEL上の数字を自動で振り分ける方法」の回答画像3
    • good
    • 0

small構文を 参照ください、


https://dekiru.net/article/4537/
    • good
    • 0

》 ランダムに生成された数字が各セルに入力されており


それは示されたワークシートのどの部分ですか?
どの範囲の数値も左から右へ昇順に並んでいるではありませんか?!
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

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

Qエクセルのカテゴリーでの整理方法を教えてください

エクセルでのカテゴリーごとに項目が存在しているのですが、
その見せ方・見た目を変更したく、ご教授お願いいたします。

===========
A 田中
A 今井
A 鈴木
A 佐藤
B 今野
B 浅田
B 水島
===========
↓↓↓
===========
A 田中,今井,鈴木,佐藤
B 今野,浅田,水島
===========

のように、AやBのカテゴリーを結合し、その右側のセルに、
該当する名前をカンマ区切りで再配置したいのです。

まだ、エクセル初心者でやり方がわからず、、
ご教授お願いいたします。

Aベストアンサー

其れなら 超簡単で、
ナイトキャップ前なので 助かります。

一般式、
=IFERROR(
 OFFSET($A$1,
  SMALL(
   INDEX(
    ($A$1:$A$7<>$A10)*10^10
    +ROW($A$1:$A$7)
   ,,),
  COLUMN(A1))-1,
  1,
  1,
  1)&"、",
 "")
(※注:読み易いように、
インデントを 付けてみました)

ファイル、
https://1drv.ms/x/s!AjviygfJDgV_3B85WQWilUZO0bM4

尚、
ファイルは 必ず、
一度 Excelで、
開き、、
ローカルに 別名保存を、
してくださいね、

別名保存でないと、
意味が ないですよ。


さすれば、
閲覧も、編集も、
叶うと 思いますよ。

Qエクセル 文字列に数字を含む場合に色を付ける条件付き書式設定

エクセル2016です。
文字列に1つでも数字が入っている場合に色をつけたいです。

<例>
 A
1 足立区綾瀬
2 日光市今市1
3 新宿区新宿九
の場合に、A2セルだけ色をつける

どうかよろしくお願いします。

Aベストアンサー

No.3です。私は勘違いしていたようで、すみません。
こんどはちゃんと確認しました。

=MATCH(FALSE,(ISERROR(FIND(COLUMN(A1:J1)-1,A1))),0)

これでいかがでしょうか?
全角の数字が入る可能性はないとしても、もし混入する恐れがあるなら、
ASC関数を入れてください。

=MATCH(FALSE,(ISERROR(FIND(COLUMN(A1:J1)-1,ASC(A1)))),0)

Qエクセル リストと完全一致するセルに色をつける

シート1のA列とB列に
aaa ccc
bbb ggg
ccc kkk
ddd ooo
と言うリストがあって、A1〜A4はAチーム、B1〜B4まではBチームと名前を付けています
シート2にAチームのリスト4個が続いているものがあればセルを赤、Bチームのリスト4個が続いているものがあればセルを黄色に塗りたいです
AチームとBチームの中には同じ品番がある時もあります
条件付き書式で設定は出来るでしょうか?

Aベストアンサー

(´・ω・`)
”○” の数を数えるんじゃないんだよなあ。

・・・本題・・・

条件付き書式ですよね。

シート2のリストの並び順は
 aaa
 ccc
 bbb
 ddd
では「Aチーム」と認識しないという事でよろしいでしょうか?
ならば、とても簡単です。

シート2の一覧において、

 判定するセル1
 判定するセル2
 判定するセル3
 色を付けるセル
 判定するセル4
 判定するセル5
 判定するセル6

という範囲について調べれば良いという事。

 判定するセル1
 判定するセル2
 判定するセル3
 色を付けるセル

 判定するセル2
 判定するセル3
 色を付けるセル
 判定するセル4

 判定するセル3
 色を付けるセル
 判定するセル4
 判定するセル5

 色を付けるセル
 判定するセル4
 判定するセル5
 判定するセル6

の4パターンについてそれぞれ調べれば良いだけ。

自分なら
 aaa-bbb-ccc-ddd
のようにシート1から文字列を作り、それが調べるセルで同じパターンになるかを調べます。
シート1はA5セルから、シート2はA11セルからデータが入力されているなら、

 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A11 & A12 & A13 & A14
 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A12 & A13 & A14 & A15
 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A13 & A14 & A15 & A16
 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A14 & A15 & A16 & A17

という条件になる。
この4つのうちの一つでも条件を満たせばセルに赤色を付ければいい。
「Bチーム」についても同様にすればいいので、
この場合、8つの条件式を設定することになります。

面倒でもこの考え方ができていないと、ちょっと条件が変わっただけで対処できずに終わります。
冒頭で「並び順」について書きましたが、並び順がシート1のリストの通りでなくとも色を付けたい場合でも、この考え方は必要ということです。

・・・
ちなみに厄介なのが、どちらのチームにも「ccc」がいるというところかな。
これが無ければ違う方法でシンプルにできるんですけどねえ。

(´・ω・`)
”○” の数を数えるんじゃないんだよなあ。

・・・本題・・・

条件付き書式ですよね。

シート2のリストの並び順は
 aaa
 ccc
 bbb
 ddd
では「Aチーム」と認識しないという事でよろしいでしょうか?
ならば、とても簡単です。

シート2の一覧において、

 判定するセル1
 判定するセル2
 判定するセル3
 色を付けるセル
 判定するセル4
 判定するセル5
 判定するセル6

という範囲について調べれば良いという事。

 判定するセル1
 判定するセル2
 判定するセル3
 色を付け...続きを読む

QExcelで「令和」と表示されるのは5月1日にならないとだめですか?

「日本の新元号に関する Office の更新プログラム」というページ(下記)で、
「Windows と Office の更新プログラムを適用済みの場合でも、Windows 上で実行されている Office 製品は 2019 年 5 月 1 日に新元号が開始されるまで、新元号を表示しませんのでご注意ください。」
と書かれています。
https://support.microsoft.com/ja-jp/help/4478844/office-updates-for-new-japanese-era

今月4月中に、Excelのセルに来月5月以降の年月日を入力した場合に、自動で「令和」という元号を表示させることはできないのでしょうか。

もし、できるということであれば、「2019 年 5 月 1 日に新元号が開始されるまで、新元号を表示しません」とはどのような意味なのでしょうか。

Aベストアンサー

>こちらでは、「4月17日以降にOfficeも更新されれば「令和元年」と表示されると思います」と書かれているんですが

その方は、Microsoftの方ではないですし個人の予想ですよね?公式が出ているのにそれを持ち出してどうするんですか?

5/1より前に新しい元号を表示したい場合は数式や表示形式で限定的に表示させる方法を色々な方が考え付いていますよ。
検索すればたくさん出てきます。

Qマクロ無しで時間自動で記入をしていきたい

すごく贅沢な話なのですが・・・
マクロを使わず、通常のエクセルで時間を手入力でなく何かしらしたら(例:「1」と入力)自動で別セルに現在時刻ほ記載してくれる

マクロだと下記のような内容でやってます(一部)
Range("H3:K33").Select
Selection.Copy
Sheets("結果").Select
Range("A4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

マクロを使わずやれる方法はないでしょうか・・・

Aベストアンサー

論より 証拠、

作ってみました。


式、
=TEXT(IF(ISBLANK(B1),IF(ISBLANK(A10),B10,TODAY()),"此処が 変わります。"),"rr/mm/dd hh:mm")

ファイル、
https://1drv.ms/x/s!AjviygfJDgV_3GnS4Ko-q3mWU9fP

尚、
ファイルは 1度、
ローカルに 別名保存して、
其の保存ファイルを 扱うように、
してくださいね、

別名保存でないと、
意味が 無いですよ。


さすれば、
閲覧も、編集も、
叶うものと 思いますよ。

Qエクセルのファイルを開く際の質問です

エクセルのファイルを開くと、常にAの160のセルが左上に表示させるような方法はありませんでしょうか、みんなが使うので、いつも開くと、最期のほうのページが表示されます。
VBAになるのかと思いますが、思いつきません。
先頭行の固定は必要なのですが、なんとか途中のページにある文章を左上にいつも表示させて開きたいのです。どなたか、お救い下さい。

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

Aベストアンサー

こんばんは。

'//Thisworkbook モジュールに貼り付けます。
Private Sub Workbook_Open()
  Application.Goto Worksheets(2).Range("A160"), True
End Sub

マクロ付きのブック(xlsm)か、バイナリのブック(xlsb) で保存します。

ただし、もし、拡張子が、xlsx でマクロなしのブックを指定した場合は、個人用マクロブックなどを使った特別のブログラムが必要になります。それはまた、ご相談ください。

Qお世話になっております エクセルで有給の管理をしたいのですが 数式がわかりません。ご教示お願いします

お世話になっております

エクセルで有給の管理をしたいのですが
数式がわかりません。ご教示お願いします。
当社の場合、年休は
一日年休、時間年休、半日年休(1日の半分の年休)の三種類があります。
(8時間拘束です)

一日年休は時間に換算すると8時間
残日数と残時間を足してすべて時間に換算する、まではわかるのですが、頭を悩ませているのが、半休と時間年休の表示をわけることです。

<例>
年休残日数が16日と1時間あるとします。
そこで、半日年休を取ったとします。
16日+1時間を時間に換算すると129時間です
そこから半日と考えて4時間をマイナスすると125時間となりますが、これを下記の数式に入れると

=INT(125/8)&"日"&MOD(125,8)&"時間"

15日5時間となりますが、実際は15日と半日と1時間です。
4時間年休を取ったすればその場合は、残は15日5時間でOKです。

どういう計算式を入れればこのとおり表示できるでしょうか。

悩んで禿げそうです。
どなたかお知恵をお貸し願います。
よろしくお願いします

_______このように表示したい_____________

年月日|1日単位|半日単位|時間単位 残
2月5日   0    1    0   15日半日1時間
2月7日   0    0    4   14日半日5時間
2月8日   0    1    0   14日5時間

お世話になっております

エクセルで有給の管理をしたいのですが
数式がわかりません。ご教示お願いします。
当社の場合、年休は
一日年休、時間年休、半日年休(1日の半分の年休)の三種類があります。
(8時間拘束です)

一日年休は時間に換算すると8時間
残日数と残時間を足してすべて時間に換算する、まではわかるのですが、頭を悩ませているのが、半休と時間年休の表示をわけることです。

<例>
年休残日数が16日と1時間あるとします。
そこで、半日年休を取ったとします。
16日+1時間を時間に換算すると...続きを読む

Aベストアンサー

有給休暇の全てを時間単位で管理して、
残時間に対する最後の表示だけを、日+時間の表示にすればよいと思います。
日=残時間÷8の商、時間=その余り、で表せます。

年間有給時間=年間有給日数×8時間、として、
日休暇=8時間
半休=4時間(午前、午後とも)
時間給=時間に切り上げの時間数
これを消化ごとに減じていけばよい、と思います。

Qエクセル データの入力規制「リスト」でこんな事できますか?

エクセルでこんな事できますか?
並列したQ列 R列があり、
また、添付には表記されていませんが、
その隣にS列 T列があり、
Q列、S列は、「コード」という事で、
Q列は1,2,3,4,5,6,7,8,9,10
S列は11,12,13,14,15,16,17,18,19,20
です。
R列は、「材質」でQ列に対応し、添付ファイルのように10項目
T列も「材質」でS列に対応し、10項目あります。

R列 T列「材質」を見て Q37セルにコードを入力したく、
その時、ドロップダウンリストとして、R列、続けて、T列の項目を表示したいです。

データの入力規制「リスト」で、できそうかと思い、頑張っていたのですが、
うまくいかず困っています。
データの入力規制「リスト」にはこだわりませんが、
マクロはできるだけ使わず完成したく思います。
エクセル詳しいかたご教授よろしくお願いします。

Aベストアンサー

あー…
入力規則はあくまでも、データ入力を補助するための機能ですからリストと違う文字を反映させることはできませんよ。

例えばリストデータは、01りんご・02プリンのように作って置いて、コードを出す時に
=LEFT(Q37,2)*1
と入れておくとか?

QEvaluate内で変数を使用して指定範囲内全てを60倍し、空白セルにできた0を消しておくには

セル範囲内に*60したいと思い、以下のようにしましたが、実行後のセル範囲内の値が全て#VALUE!になってしまいました。書き方をどのように修正すればできるでしょうか?
式の中にあるOffsetは、最初は、Offset(0, 0)から始まり、,繰り返しの中で、lastcol分だけ列を移動しながら、60倍していきたいと思っています。シート名は、Withで指定していますが、Evaluate内で、使えないなら、直接シート名を記載しても問題ありません。行範囲も、列の移動に合わせて変動します。(lastrowで決定)

.Range(.Cells(12, 31).Offset(0, lastcol), .Cells(11 + lastrow, 33).Offset(0, lastcol)).Value = Evaluate(" & .Range(.Cells(12, 31).Offset(0, lastcol), .Cells(11 + lastrow, 33).Offset(0, lastcol))).Address(False, False) & * 60")


また、範囲内には空白セルも含まれており、60倍すると、空白セルに0が入力されてしまうのではないか、と思いますが、できれば空白セルは除外して処理できるとよいのですが、その判定をここに入れ込むと式が複雑で分かりにくくなるのではないかと思うので、空白セルもそのまま処理し、その後0を削除する処理も同じようにEvaluateで引き続き処理できれば良いと思っていますので、大変申し訳ないのですが、60倍する式の修正式と、同じ範囲の0を削除する式を教えていただきたいです。
もし、0を削除する式は、Evaluateを使わず、もっとよい方法があればそれでも良いです。Excelの設定で0を表示しない、はNGです。

セル範囲内に*60したいと思い、以下のようにしましたが、実行後のセル範囲内の値が全て#VALUE!になってしまいました。書き方をどのように修正すればできるでしょうか?
式の中にあるOffsetは、最初は、Offset(0, 0)から始まり、,繰り返しの中で、lastcol分だけ列を移動しながら、60倍していきたいと思っています。シート名は、Withで指定していますが、Evaluate内で、使えないなら、直接シート名を記載しても問題ありません。行範囲も、列の移動に合わせて変動します。(lastrowで決定)

.Range(.Cells(12, 31...続きを読む

Aベストアンサー

こんにちは。

いずれにしても、One Line で書くというのは、VBAの場合、どこでミスしたか分かりなくなりますから、分かち書きのほうがよいでしょう。
Test1 は、Evaluete式は、配列計算です。結果的には、空白を抜くという作業が、ややこしくなっています。
Test2 は、VBAの通常の構文を使ったもので、標準的です。

'//標準モジュール
Sub Test1()
 Dim Rng1 As Range
 Dim adr1 As String
 Dim Rng2 As Range
 Dim adr2 As String
 Dim LastCol As Long
 Dim LastRow As Long
 With ActiveSheet
  LastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
  LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
  Set Rng1 = .Range(.Cells(12, 31).Offset(0, LastCol), .Cells(11 + LastRow, 33).Offset(0, LastCol))
  adr1 = Rng1.Address(0, 0)
  On Error Resume Next '空白がない場合
  Set Rng2 = Rng1.SpecialCells(xlCellTypeBlanks)
  adr2 = Rng2.Address
  On Error GoTo 0
  Rng1.Value = Evaluate(adr1 & " * 60")
  If Not Rng2 Is Nothing Then
   .Range(adr2).Value = ""  '0を抜く。"" は残りません。
  End If
 End With
End Sub

'//標準モジュール
Sub Test2()
 Dim LastCol As Long
 Dim LastRow As Long
 Dim c, Rng As Range
 With ActiveSheet
  LastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
  LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
  Set Rng = .Range(.Cells(12, 31).Offset(0, LastCol), .Cells(11 + LastRow, 33).Offset(0, LastCol))
  For Each c In Rng
   If c.Value <> "" Then
    c.Value = c.Value * 60
   End If
  Next
 End With
End Sub

こんにちは。

いずれにしても、One Line で書くというのは、VBAの場合、どこでミスしたか分かりなくなりますから、分かち書きのほうがよいでしょう。
Test1 は、Evaluete式は、配列計算です。結果的には、空白を抜くという作業が、ややこしくなっています。
Test2 は、VBAの通常の構文を使ったもので、標準的です。

'//標準モジュール
Sub Test1()
 Dim Rng1 As Range
 Dim adr1 As String
 Dim Rng2 As Range
 Dim adr2 As String
 Dim LastCol As Long
 Dim LastRow As Long
 With ActiveSheet
  La...続きを読む

QエクセルでのIF関数について

エクセルでIF関数で
同じセルの中で、IF関数を使って、例えば、
セルの中味で、0を越えれば、あ
0未満なら、い
と表示したいのですが、できますでしょうか?
できるなら、その関数表示をお願いします。
今、作業中なので、できましたら早急に宜しくお願いします!
例えば、
=IF( $C3>0,"あ","い") ではなくて、C3=0 が い になるので、ダメ!!

Aベストアンサー

こんにちは

せっかく写真を添付なさっても、どこがC3セルなのかわからないですね。
(行番号と列番号が不明)

>0を越えれば、あ
0より大きければ「あ」(0は含まない)
>0未満なら、い
0より小さければ「い」(0は含まない)
ということになるので、0の場合にどうしたいのかが記されていません。

>C3=0 が い になるので、ダメ!!
ということから勝手に推測して『0以上なら「あ」』という条件に読み替えるとするなら
 =IF($C3>=0,"あ","い")

さらに、『C列が空白の場合は、「あ」と表示しない(空白表示)』という条件も付け加えるのなら
 =IF($C3="","",IF($C3>=0,"あ","い"))
とかでしょうか…


人気Q&Aランキング